为什么PHP无法正确检测PDF MIME类型(wkhtmltopdf)?

3

问题

我使用wkhtmltopdf创建了一个pdf文件,但是php无法识别它为pdf。当我查找mime类型时,返回的是unknown

我应该如何:

  • 修复wkhtmltopdf,希望能通过设置实现
  • 调整php的pdf文件识别算法,使其能够将其视为pdf。

代码

PHP版本5.6
Apache 2.4
Windows 10 Pro
fileinfo 1.0.5
wkhtmltopdf "0.12.4 (with patched qt)"

$file_info = new finfo(FILEINFO_MIME_TYPE);
return $file_info->file($file_path); // returns "/unknown"

如何复现问题。

我无法在此处附加PDF文件,但可以按照主页上的说明简单运行wkhtmltopdf工具:wkhtmltopdf http://google.com google.pdf然后在其上运行上述PHP代码。


我刚刚尝试了一下,但无法重现您的错误,我得到了这个响应'application/pdf' - mega6382
请问您能否执行以下操作:1)显示fileinfo扩展的版本 echo phpversion('fileinfo'); 2)确保文件在 $file_path 存在? - Ivan Kalita
操作系统和版本? - AbraCadaver
@IvanKalita 已经添加到我的问题中。 - danielson317
@mega6382添加了更多信息。很高兴知道它对你有用,也许我可以调整一些东西,让它运行起来。 - danielson317
1个回答

2

以下是我运行环境的信息:

操作系统:Win 10 Pro

Apache版本:Apache/2.4.27 (Win32) OpenSSL/1.0.2l PHP/7.1.9

PHP版本:7.1.9

FileInfo版本:1.0.5

WkHTMLtoPDF版本:wkhtmltox-0.12.4_msvc2015

我在管理员模式下的CMD中运行了该命令:

 C:\Program Files\wkhtmltopdf\bin>wkhtmltopdf http://google.com google.pdf

并且将以下PHP代码运行(在将google.pdf移动到htdocs内的我的目录后):

$file_path = "google.pdf";
$file_info = new finfo(FILEINFO_MIME_TYPE);
var_dump($file_info->file($file_path));

输出结果为(成功):

C:\xampp\htdocs\htmlpdf\test.php:5:string 'application/pdf' (length=15)

如果这个方法对你不起作用,我建议尝试以下几种方法:
1)使用mime_content_type函数,虽然已经被标记为弃用
$file_path = "google.pdf";
var_dump(mime_content_type($file_path));

2) 使用finfo_open函数,实际上和new finfo一样,但还是值得一试:

$file_path = "google.pdf";
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $file_path);
finfo_close($finfo);
var_dump($mimetype);

3) 或者如果你不介意使用外部库和回退依赖项,可以尝试以下方法:

  1. http://getid3.sourceforge.net/
  2. https://dev59.com/THM_5IYBdhLWcg3wyWSt#3664655

啊,PHP 7。目前由于一些我无法控制的依赖关系,我无法更改PHP版本。但是其他所有东西都看起来一样。 - danielson317
1
似乎已弃用的函数可以完成这项工作。在我升级 PHP 之前,它将继续发挥作用。 - danielson317

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接