【问题标题】:Use getimagesize in conditional statement php在条件语句php中使用getimagesize
【发布时间】:2016-03-18 20:20:02
【问题描述】:

我想确保上传的图片有尺寸。如果图像尺寸大于50,我会运行一个测试,该测试应该禁止上传。这是我的代码:

if(isset($_FILES['fupload'])) {

    $filename = strtolower(($_FILES['fupload']['name']));
    $ext = substr($filename, -4);
    $filename = explode('.',$filename);
    $filename = $filename[0];
    $filename = str_shuffle($filename);

    $filename = $filename.$ext; 

    $source = $_FILES['fupload']['tmp_name'];   
    $target =  $path_to_image_directory.$filename;

    $size = getimagesize($filename);

    if( $size[0] > 20 || $size[1] > 20 ) {
        echo 'Too Large!';

    } else {
        move_uploaded_file($source, $target);

        createThumbnail($filename);

        $title= mysqli_real_escape_string($connection,$_POST['title']);
        $keyword1 = mysqli_real_escape_string($connection,$_POST['keyword1']);
        $keyword2 = mysqli_real_escape_string($connection,$_POST['keyword2']);
        $keyword3 = mysqli_real_escape_string($connection,$_POST['keyword3']);

        $Q = "INSERT INTO images (name, title, keyword1,keyword2,      keyword3)VALUES('$filename', '$title', '$keyword1','$keyword2','$keyword3')";

        if(!mysqli_query($connection, $Q)) {
            die("error inserting into pres name".mysqli_error($connection));
        }   
    }
}

我会收到“太大!”的消息。当我尝试上传大图像时,但我没有。图片无论多大都会上传。我的最终目标是将大于号切换为小于号,以确保文件具有实际尺寸。

我从 stackoverflow 得到这个条件语句:

if($size[0] > 20 || $size[1] > 20) {
    echo 'Too Large!';
}

它似乎应该阻止上传,但事实并非如此。谁能帮我理解一下?

【问题讨论】:

  • 你需要给getimagesize提供当前的文件路径,在调用函数时是$_FILES['fupload']['tmp_name']
  • 另外你应该检查$size是否(严格)等于false,否则我可以上传任何非图像文件。
  • print_R($size) 得到什么?
  • 我按照 Charlotte Dunois 的建议进行了操作,并且按预期工作。我还添加了检查 $size 是否(严格)等于 false。我在一个扩展名为 jpg 的 php 文件上进行了测试,但上传失败了。谢谢你的好建议。

标签: php security upload getimagesize


【解决方案1】:

你可以使用

list($width, $height, $type, $attr) = getimagesize($_FILES["fupload"]["tmp_name"]);

if(($width>20)||($height>20)){
                $error = "Image Dimemsions Exceed Allowed Dimensions";
                return $error;
            }

希望对你有帮助;)

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多