【问题标题】:Image uploader, capital letters in JPG extension doesn't work图片上传器,JPG 扩展名中的大写字母不起作用
【发布时间】:2013-04-27 13:52:32
【问题描述】:

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

错误的文件格式

【问题讨论】:

  • 用输出编辑了我的帖子
  • 你不应该在“类型”而不是“名称”上使用 / 爆炸吗?
  • 这些是直接来自相机的图像。所以通常它应该可以工作

标签: php forms file-upload jpeg


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    $extension = end(explode(".", $_FILES["file"]["name"])); 我认为这会导致错误。改成$extension = strtolower(end(explode(".", $_FILES["file"]["name"])));//全部改成小写再测试。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-03-15
        • 1970-01-01
        • 2018-11-30
        • 2012-05-03
        • 1970-01-01
        • 2014-02-08
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        相关资源
        最近更新 更多