1

我正在制作图像上传器,但由于某种原因,我不允许上传大写字母的 JPG 图像。这怎么可能?

我还尝试将 JPG 添加到 allowedExts 数组,但这也不起作用。

$filesize = '8500'; // PUT the filesize here in KB

if(isset($_FILES["file"])){
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
var_dump($_FILES['file']['type']);
var_dump($extension);
if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/png")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < $filesize)
    && in_array($extension, $allowedExts)){
    if ($_FILES["file"]["error"] > 0){
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
    else{       
        if (file_exists("source/images/" . $_FILES["file"]["name"])){
            echo 'image already exists';
        }
        else{
            //Upload original file to folder    
        }
    }
}
else{
    echo 'Wrong fileformat';
}

作为输出我得到这个:

字符串''(长度=0)字符串'JPG'(长度=3)

错误的文件格式

4

4 回答 4

2

PHP 字符串比较区分大小写:

&& in_array($extension, $allowedExts)){

如果您上传,将会爆炸,kitten.JPG因为不在您允许的扩展数组中。是,但就 PHP 而言,这是一个完全不同的字符串。您应该使用 strtolower 规范化从上传文件名中获得的扩展名,或者至少使用不区分大小写的比较,例如strcasecmp.JPG.jpg

请注意,您的文件处理逻辑不正确。您显然已经抓住了一个分布非常广泛的 BAD 示例。上传时首先需要检查的是参数['error']。如果它不为零,那么您不能信任该特定文件的 $_FILES 数组中的任何其他内容。不要检查大小,不要检查 mime 类型,不要检查文件名。如果上传失败,这些都可能不存在/不正确/等等...

于 2013-04-27T14:23:50.410 回答
0

$filesize 在哪里定义?如果您在大写中添加了 JPEG,应该可以。

于 2013-04-27T14:06:14.997 回答
0

$extension = end(explode(".", $_FILES["file"]["name"]));我认为这会导致错误。将其更改为,$extension = strtolower(end(explode(".", $_FILES["file"]["name"])));//将所有内容更改为小写,然后进行测试。

于 2013-04-27T14:01:39.080 回答
0

对于最终出现在这里的其他人:带有大写字母的图片可能来自不同的来源(具有不同设置的相机)而不是带有小写字母的图片。

例如,带有大写字母的文件可能太大,并且您没有正确检查$_FILES['file']['error']属性。

检查您是否有错误$_FILES['file']['error']并与错误列表进行比较:http: //php.net/manual/en/features.file-upload.errors.php

于 2017-01-30T18:29:39.643 回答