如何限制上传大小?

时间:2014-04-24 15:34:12

标签: php html

您好我正在开发一个上传图片的上传系统。我有一些限制,例如只允许某些类型的图像,具体取决于扩展名(jpg,jpeg,png ...)。

验证的那部分工作正常。我通过上传pdf文件测试并得到了我期待的错误并且文件没有上传。我还有一个if语句来确保文件大小小于200KB。但是,这不起作用。 2MB的图像也会上传,即使它们太大了。想法是上传5张图片。

以下是相关的php代码:

include_once'db.inc.php';

for($int = 1; $int <= 5; $int++){
    $str = (string) $int;
    $inputName = 'image' . $int;

    if(isset($_FILES[$inputName]['name'])){
        $name = $_FILES[$inputName]['name'];
        $size = $_FILES[$inputName]['size'];
        $type = $_FILES[$inputName]['type'];
        $tmp_name = $_FILES[$inputName]['tmp_name'];
        $error = $_FILES[$inputName]['error'];
        $dest = 'uploads/';
        echo $size;
        echo $name;

        if(!empty($name)){
            global $dest;
            global $tmp_name;
            global $size;
            global $name;

            $jpg = 'image/jpg';
            $jpeg = 'image/jpeg';
            $pjpeg = 'image/pjpeg';
            $x_png = 'image/x-png';
            $png = 'image/png';
            $gif = 'image/gif';
            $bmp = 'image/bmp';

            $allowedExts = array('jpg','jpeg','png','bmp');
            $temp = explode('.',$name);
            $ext = end($temp);

            if($_FILES[$inputName]['type'] == $jpg 
            or $_FILES[$inputName]['type'] == $jpeg or $_FILES[$inputName]['type'] == $pjpeg 
            or $_FILES[$inputName]['type'] == $x_png or $_FILES[$inputName]['type'] == $png
            or $_FILES[$inputName]['type'] == $png or $_FILES[$inputName]['type'] == $gif
            or $_FILES[$inputName]['type'] == $bmp)
            {
                if(!$size < 200000){
                    echo '<p>' . $name . 'Is too big' . '</p>';
                    if(!in_array($ext, $allowedExts)){
                        echo '<p>' . $name . 'Is not an image' . '</p>'
                    }
                }else{
                    move_uploaded_file($tmp_name, $dest.$name);
                }
            }

            else{
                global $name;
                echo '<div><p style="background:black;color:red;font-size:14px;position:relative;top:5px;left:30px"><span>' . $name . ' is either too big or not an image' . '</span></p></div>';
            }
        }
    }
    $int = (int) $str;
}

那就是php,这里是相关的html也供参考:

                            "<div class="fieldRow"><label class="image1" for="image 1" style="display:block;width:100%;">Image 1: <input class="pickImage" name="image1" type="file" /><?php ;?></label></div>
                            <div class="fieldRow"><label class="image2" for="image 2" style="display:block;width:100%;">Image 2: <input class="pickImage" name="image2" type="file" /><?php ;?></label></div>
                            <div class="fieldRow"><label class="image3" for="image 3" style="display:block;width:100%;">Image 3: <input class="pickImage" name="image3" type="file" /><?php ;?></label></div>
                            <div class="fieldRow"><label class="image4" for="image 4" style="display:block;width:100%;">Image 4: <input class="pickImage" name="image4" type="file" /><?php ;?></label></div>
                            <div class="fieldRow"><label class="image5" for="image 5" style="display:block;width:100%;">Image 5: <input class="pickImage" name="image5" type="file" /><?php ;?></label></div>"

整个表单比它大得多,并且具有相应的enc_type属性以及post和action属性,该属性具有php文件名的值。如果你能指出我的方向非常有帮助。

2 个答案:

答案 0 :(得分:1)

添加:

<input type="hidden" name="MAX_FILE_SIZE" value="512000" />

到您的HTML表单然后在PHP中检查它:

// Error Checking Extended
    if($_FILES['image1']['error'] == 2) { // Change to your file field
    echo "You've exceeded the maximum file upload size of 512kb.";
    return false;
    }

编辑:

如果你想要处理数据,我会把它留给你,如果每个单独的文件比复制它更容易,但是为了重新分解和清理代码,我建议你从$ _POST数组。

答案 1 :(得分:0)

你可以使用:

ini_set("upload_max_filesize", "20M");