【问题标题】:How to check whether the upload file is PDF in PHP如何在PHP中检查上传文件是否为PDF
【发布时间】:2013-07-18 12:33:31
【问题描述】:

对于上传文件类型检查,我已经实现了:

$_FILES["file"]["type"][$i] == 'application/pdf'

但是,如果我更改了扩展名,此检查将不起作用。

所以,经过一番研究,我尝试了

$finfo = new finfo();
$fileMimeType = $finfo->file($_FILES["file"]["name"][$i] );

或者:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$fileMimeType = finfo_file($finfo,$_FILES["file"]["name"][$i])

然而,$fileMimeType 没有回显。

如何解决问题?谢谢

【问题讨论】:

标签: php pdf mime


【解决方案1】:

如果您使用fread 读取文件,您需要有一个包含所有文件头类型定义的字典。如果要使用file shell 命令

$out = exec("file 'R-intro.pdf' | cut -d: -f2 | cut -d, -f1");
if (trim($out) == "PDF document") {
   echo "1";
}

要进一步扩展如何用上传的文件替换常量文件名,请参阅下文。

$out = exec("file '" . $_FILES['file']['tmp_name'] . "' | cut -d: -f2 | cut -d, -f1");

【讨论】:

  • 感谢您的回答。当我检查上传文件时,它应该是一个临时文件( $_FILES["file"]["name"][$i] ),如何使用 shell 脚本检查它?
  • 这不是shell脚本,这是使用shell命令的php脚本,需要将R-intro.pdf替换为tmp文件名
【解决方案2】:

我猜问题出在:

$_FILES["my_file"]["name"]

因为它只包含上传文件的名称。如果您想在使用move_uploaded_file 移动文件之前检查文件,您可以使用以下方式引用临时文件:

$_FILES["my_file"]["tmp_name"]

【讨论】:

    【解决方案3】:

    读取文件的前 4 个字节并检查它们是否匹配 %PDF

    $filename = "pdffile";
    $handle = fopen($filename, "r");
    $header = fread($handle, 4);
    fclose($handle);
    

    对照%PDF检查$header

    【讨论】:

    • 当您说检查时,您的意思是 in_array($header, "%PDF"); ?不知道如何使用 %
    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多