为啥 php 不能正确检测到 pdf mime 类型(wkhtmltopdf)?

Posted

技术标签:

【中文标题】为啥 php 不能正确检测到 pdf mime 类型(wkhtmltopdf)?【英文标题】:Why doesn't php correctly detect a pdf mime type (wkhtmltopdf)?为什么 php 不能正确检测到 pdf mime 类型(wkhtmltopdf)? 【发布时间】:2018-04-11 19:33:46 【问题描述】:

问题。

我使用 wkhtmltopdf 创建了一个 pdf,php 不会将其识别为 pdf。当我查找 mime 类型时,它返回 unknown

我该怎么做:

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

代码

PHP 5.6 版 阿帕奇 2.4 Windows 10 专业版 文件信息 1.0.5 wkhtmltopdf“0.12.4(带补丁的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' 能否请您 1) 显示文件信息扩展的版本echo phpversion('fileinfo'); 2) 确保文件存在于$file_path 操作系统和版本? @IvanKalita 已添加到我的问题中。 @mega6382 添加了更多信息。很高兴知道它对你有用,也许我可以调整一些东西并让它运行。 【参考方案1】:

这是环境,我在上面运行过:

操作系统: Win 10 专业版

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

PHP: 7.1.9

文件信息: 1.0.5

WkHTMLtoPDF: wkhtmltox-0.12.4_msvc2015

我在CMD in Admin mode上运行了命令:

 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,表示为deprecated

$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) 或者,如果您不介意使用外部库和后备依赖项,请尝试:

    http://getid3.sourceforge.net/ https://***.com/a/3664655

【讨论】:

ah php 7. 由于某些我无法控制的依赖关系,我目前无法更改 php 版本。但其他一切看起来都一样。 似乎已弃用的功能可以完成这项工作。在我可以升级 php 之前它会起作用。

以上是关于为啥 php 不能正确检测到 pdf mime 类型(wkhtmltopdf)?的主要内容,如果未能解决你的问题,请参考以下文章

docx 的 PHP mimetype 检测

为啥 Imagick 类不能将 pdf 文件转换为图像文件?

PDF 文件的正确 MIME 媒体类型

PDF 文件的正确 MIME 媒体类型

PHP 7 Mime 和 PDF 验证

PHP:为啥强制 mime 下载会添加 2 个额外的空行?