У меня есть куча PDF-файлов, которые были загружены с помощью скребка. Этот скребок не проверял, был ли файл JPG или PDF, поэтому по умолчанию все они были загружены и сохранены с расширением «.pdf». Итак, просто для выяснения всех файлов в пакете есть .pdf. Однако, если я попытаюсь открыть их (файлы, которые не являются PDF, а JPG) через сервер или локально, я попал с ошибкой.
Мой вопрос. Есть ли способ с PHP проверить и посмотреть, является ли этот файл действительным PDF? Я хотел бы запустить все URL-адреса через цикл, чтобы проверить эти файлы. Их сотни, и для проверки потребуется несколько часов.
благодаря
Для локальных файлов (PHP 5.3+):
$finfo = finfo_open(FILEINFO_MIME_TYPE); foreach (glob("path/to/files") as $filename) { if(finfo_file($finfo, $filename) === 'application/pdf') { echo "'{$filename}' is a PDF" . PHP_EOL; } else { echo "'{$filename}' is not a PDF" . PHP_EOL; } } finfo_close($finfo);
Для удаленных файлов:
$ch = curl_init(); $url = 'http://path.to/your.pdf'; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $results = split("\n", trim(curl_exec($ch))); foreach($results as $line) { if (strtok($line, ':') == 'Content-Type') { $parts = explode(":", $line); echo trim($parts[1]); // output: application/pdf } }
Получите MIME-тип файла, используя функцию: finfo_file ()
if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME); $mimetype = finfo_file($finfo, "PATH-TO-YOUR-FILE"); finfo_close($finfo); echo $mimetype; } echo "<pre>"; print_r($mimetype); echo "</pre>";
Использовать finfo_file()
<?php if (function_exists('finfo_open')) { $mime = finfo_open(FILEINFO_MIME_TYPE); $mime_type = finfo_file($mime, "FILE-PATH"); if($mime_type == "application/pdf") echo "file is pdf"; else echo "file is not pdf"; finfo_close($mime); }