我有一堆使用刮板下载的PDF。这个刮板并没有检查文件是JPG还是PDF,因此默认情况下,所有这些文件都下载并以'.pdf'扩展名保存。所以,只是澄清批处理中的所有文件都是.pdf。但是,如果我尝试通过服务器或本地打开它们(不是PDF而是JPG)的文件,我会遇到错误。检查PDF是否实际上是一个带有PHP的PDF
我的问题。有没有办法用PHP来检查并看看这个文件是否是一个有效的PDF?我想通过一个循环来运行所有的URL来检查这些文件。其中有数百个,它需要几个小时的时间来检查。
感谢
我有一堆使用刮板下载的PDF。这个刮板并没有检查文件是JPG还是PDF,因此默认情况下,所有这些文件都下载并以'.pdf'扩展名保存。所以,只是澄清批处理中的所有文件都是.pdf。但是,如果我尝试通过服务器或本地打开它们(不是PDF而是JPG)的文件,我会遇到错误。检查PDF是否实际上是一个带有PHP的PDF
我的问题。有没有办法用PHP来检查并看看这个文件是否是一个有效的PDF?我想通过一个循环来运行所有的URL来检查这些文件。其中有数百个,它需要几个小时的时间来检查。
感谢
使用函数获取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>";
对于本地文件(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
}
}
此脚本没有输出,我正在运行兼容的PHP版本。 –
如果PDF是在本地下载的(正如您所提到的),路径是正确的并且存在'finfo'函数,这应该起作用。 – vonUbisch
@ smack-a-bro:你没有在任何人的脚本上得到任何输出,所以你做错了什么。打开错误报告并查看问题所在。 –
使用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);
}
此脚本没有输出 –
尝试编辑代码 –
PDF与' “%PDF” 开始' –
这个问题上的信息有点短。你可以分享你的尝试,以及你遇到了什么问题? –
我还没有尝试过任何东西,因为所有的Google搜索都将我引导到类似的东西,但不是我所需要的东西。我觉得我的问题总结了我需要完美的东西。我有一堆是PDF文件。但是,其中一些PDF是被偶然保存为PDF的JPG文件。我需要弄清楚哪些是哪些。 –