为什么php没有正确检测到pdf mime类型(wkhtmltopdf)?

时间:2017-10-30 18:14:37

标签: php pdf wkhtmltopdf

问题。

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

我怎么能:

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

代码

PHP版本5.6
Apache 2.4
Windows 10专业版 fileinfo 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代码。

1 个答案:

答案 0 :(得分:2)

这是环境,我运行它:

操作系统 赢取10个专业版

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 in Admin mode上运行命令:

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

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

$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)或者如果你不介意使用外部库,并且回退依赖,请尝试:

  1. http://getid3.sourceforge.net/
  2. https://stackoverflow.com/a/3664655