gpt4 book ai didi

php - 在php中上传文件之前检查图片文件类型和大小

转载 作者:可可西里 更新时间:2023-11-01 13:32:34 26 4
gpt4 key购买 nike

我有以下代码:

$filecheck = basename($_FILES['imagefile']['name']);
$ext = substr($filecheck, strrpos($filecheck, '.') + 1);
if (($ext == "jpg" || $ext == "gif" || $ext == "png") && ($_FILES["imagefile"]["type"] == "image/jpeg" || $_FILES["imagefile"]["type"] == "image/gif" || $_FILES["imagefile"]["type"] == "image/png") &&
($_FILES["imagefile"]["size"] < 2120000)){
} else {
echo "F2";
die();
}

我需要做的是检查上传的文件是否为 jpg/gif/png 并且其大小是否小于 2 兆。

如果它大于 2 兆,或者文件类型不正确,我需要返回/回显 F2(api 的错误代码)。

当我使用上面的代码处理一个 70k 的 jpg 文件时,它返回 F2。

子注释我上传的图片的扩展名为.JPG。案件可能是一个因素吗?如果是这样,我该如何适应?

最佳答案

请注意,您可能不想依赖文件扩展名来确定文件类型。例如,有人上传扩展名为 .png 的可执行文件会相当容易。 mime 类型也可以很容易地被恶意客户端伪造以作为图像传递。 依赖该信息存在安全风险

PHP Documentation:
The mime type of the file, if the browser provided this information. An example would be "image/gif". This mime type is however not checked on the PHP side and therefore don't take its value for granted.

尝试使用 gd ( getimagesize() ) 加载图像以确保它们是真正有效的图像(而不只是伪装成图像文件标题的随机文件... finfo_file 依赖于那些 header )。

if($_FILES["imagefile"]["size"] >= 2120000) {
echo "F2";
die();
} else {
$imageData = @getimagesize($_FILES["imagefile"]["tmp_name"]);

if($imageData === FALSE || !($imageData[2] == IMAGETYPE_GIF || $imageData[2] == IMAGETYPE_JPEG || $imageData[2] == IMAGETYPE_PNG)) {
echo "F2";
die();
}
}

如果您真的必须使用扩展名来验证文件是否为图像,请使用 strtolower()将扩展名变为小写。

$filecheck = basename($_FILES['imagefile']['name']);
$ext = strtolower(substr($filecheck, strrpos($filecheck, '.') + 1));

if (!(($ext == "jpg" || $ext == "gif" || $ext == "png") && ($_FILES["imagefile"]["type"] == "image/jpeg" || $_FILES["imagefile"]["type"] == "image/gif" || $_FILES["imagefile"]["type"] == "image/png") &&
($_FILES["imagefile"]["size"] < 2120000))){
echo "F2";
die();
}

关于php - 在php中上传文件之前检查图片文件类型和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1249943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com