检查PDF是否实际上是PHP的PDF

时间:2015-07-20 12:22:11

标签: php pdf

我有一堆使用刮刀下载的PDF。这个刮刀没有检查文件是JPG还是PDF,所以默认情况下所有文件都被下载并保存在' .pdf'延期。因此,只是为了澄清批处理中的所有文件都是.pdf。但是,如果我尝试通过服务器或本地打开它们(非PDF而非JPG的文件),我会发现错误。

我的问题。有没有办法用PHP检查并查看此文件是否是有效的PDF?我想通过循环运行所有URL来检查这些文件。它们有数百个,需要花费数小时才能检查。

由于

4 个答案:

答案 0 :(得分:2)

对于本地文件(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
    }
}

答案 1 :(得分:1)

使用函数finfo_file()

获取文件的MIME类型
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>";

答案 2 :(得分:1)

使用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);
}

答案 3 :(得分:0)

有时您必须检查文件的mime签名,有时还要检查变量的mime签名。这些是您进行两项检查的方式:

$filename = '/path/to/my/file.pdf';
$content = file_get_contents($filename);

$file_is_pdf = function(string $filename) : bool {
    return mime_content_type($filename) === 'application/pdf';
};
$var_is_pdf = function(string $content) : bool {
    $mime_type_found = (new \finfo(FILEINFO_MIME))->buffer($content);
    return $mime_type_found === 'application/pdf; charset=binary';
};
// Checks if a file contains a pdf signature.
var_dump($file_is_pdf($filename));

// Checks if a variable contains a pdf signature.
var_dump($var_is_pdf($content));