Php, загрузка файла одного типа pdf, как сделать проверку, чтобы посторонние файлы нельзя было загружать?
Сделал загрузку pdf файла на сервер, теперь думаю как добавить проверку уже в мой метод php.
Чтоб можно было загружать только pdf.
<input type="file" name="pdffile" accept="application/pdf">
Функция загрузки и генерации имени:
if (isset($_FILES['pdffile']['tmp_name']) && ($_FILES['pdffile']['tmp_name'])) {
$orderpdf = ORM::factory('Order', $id);
if ($orderpdf->loaded()) {
if ($orderpdf->pdffile != '') {
@unlink('media/uploads/pdf/' . $orderpdf->pdffile);
}
}
$symbols = '0123456789abcdefghijklmnopqrstuvwxyz';
$filename = '';
for ($i = 0;
$i < 5;
$i++
) {
$filename .= rand(1, strlen($symbols));
}
$ext = pathinfo($_FILES['pdffile']['name'], PATHINFO_EXTENSION);
$filename = 'karta-dk-' . $filename . '.' . $ext;
$a = @move_uploaded_file($_FILES['pdffile']['tmp_name'], 'media/uploads/pdf/' . $filename);
$data['pdffile'] = $filename;
}
Ответы (2 шт):
Автор решения: Sanya H
→ Ссылка
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE); // возвращает mime-тип
$mime_type = finfo_file($finfo, $filename);
finfo_close($finfo);
if ($mime_type === 'application/pdf') {...}
или так
<?php
$mime_type = mime_content_type($filename);
if ($mime_type === 'application/pdf') {...}
Автор решения: Eugene X
→ Ссылка
У PDF файлов есть заголовок, %PDF-1.4 где 1.4 версия. Прочитав первых 4 байта можно узнать что это %PDF или нет.
function isPDF($filename)
{
$f = fopen($filename, 'rb');
if ($f === false) return false;
$header = fread($f, 5);
fclose($f);
return $header === '%PDF-';
}