用于pdf和图像的php文件上传

时间:2019-11-20 19:52:19

标签: php html pdf file-upload

我有以下代码,该代码适用于图像,但不适用于PDF。我怀疑上传pdf时问题是 getimagesize ,但是我读到出于安全原因,阻止黑客伪造图片是必需的。如何使它也适用于PDF。

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
} else {
    echo "File is not an image.";
    $uploadOk = 0;
}
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" && $imageFileType != "pdf" ) {
echo "Sorry, only PDF, JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;

if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
    echo "Sorry, there was an error uploading your file.";
}
}
} 
?>

1 个答案:

答案 0 :(得分:0)

使用GD库读取图像大小的受支持文件类型包括:

  

IMG_BMP | IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM | IMG_WEBP

https://www.php.net/manual/en/function.imagetypes.php

由于未列出PDF,因此您需要使用支持PDF的内容来检查文件的有效性。 PHP似乎没有内置函数来完成此操作(仅用于创建 crement PDF的函数)。

看看https://superuser.com/questions/580887/check-if-pdf-files-are-corrupted-using-command-line-on-linux,其中有一些这样的命令实用程序选项。您需要选择一种实用工具,该实用工具适合您要验证的有关PDF文件,您的操作系统以及您可能有的其他要求的内容。该线程建议同时使用pdfinfoqpdf

使用system()调用运行您选择的实用程序,

$result = system('pdfinfo '.$_FILES["fileToUpload"]["tmp_name"], $retval);

pdfinfo替换为您已安装的所选实用程序的名称。根据实用程序和返回的信息,您必须相应地调整脚本。