图片上传器,JPG扩展中的大写字母不起作用

时间:2013-04-27 13:52:33

标签: php forms file-upload jpeg

我正在制作图片上传器但由于某种原因我不允许以大写字母上传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';
}

作为输出,我得到了这个:

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

文件格式错误

4 个答案:

答案 0 :(得分:2)

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

&& in_array($extension, $allowedExts)){
如果您上传kitten.JPG

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

$ filesize在哪里定义? 如果你在大写字母中添加了JPEG,那应该有效。

答案 3 :(得分:0)

对于最终到达此处的其他人:大写字母的图片可能来自不同来源(具有不同设置的相机),而不是大写字母的图片。

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

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