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

问题描述 投票:0回答:1

我有以下代码,该代码适用于图像,但不适用于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.";
}
}
} 
?>
php html pdf file-upload
1个回答
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的内容来检查有效性。 PHP似乎没有内置功能来完成此任务。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.