在php中设置图像大小的限制(以MB或KB为单位)

时间:2013-05-07 16:00:19

标签: php

我有以下php代码,允许用户上传图片。如何修改我的代码,以便限制(比如说最大800 k)到上传图像的大小。这是我的代码。

<?php
if (isset($_FILES['profile'])===true) {
    if (empty($_FILES['profile']['name']) === true) {
        echo'Please choose an Image File !';
    } else {
        $allowed = array('jpg', 'jpeg', 'gif', 'png');                            
        $file_name = $_FILES['profile']['name'];
        $file_extn = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
        $file_temp = $_FILES['profile']['tmp_name']; 

        if (in_array($file_extn, $allowed) === true) {
            change_profile_image($session_user_id, $file_temp, $file_extn);
            header('Location: ' . $current_file);  
            exit();
        } else {
            echo'Incorrect file type! Allowed:';
            echo implode(', ', $allowed);
        }
    }
}

if (empty($user_data['profile'])=== false ) {
    echo '<img src="', $user_data['profile'], '" alt="', $user_data['name'], ' - Profile Image">';   
}
?>

4 个答案:

答案 0 :(得分:2)

修改代码以处理检查,您只需要添加以下语句

if ($_FILES['profile']['size'] > 800*1024) {
    echo 'File size too large';
} else {
    // your code for processing uploaded image
}

例如

<?php
if (isset($_FILES['profile'])===true) {
    if (empty($_FILES['profile']['name']) === true) {
        echo'Please choose an Image File !';
    } else {
        if ($_FILES['profile']['size'] > 800*1024) {
            echo 'File size too large';
        } else {
            $allowed = array('jpg', 'jpeg', 'gif', 'png');                            
            $file_name = $_FILES['profile']['name'];
            $file_extn = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
            $file_temp = $_FILES['profile']['tmp_name']; 

            if (in_array($file_extn, $allowed) === true) {
                change_profile_image($session_user_id, $file_temp, $file_extn);
                header('Location: ' . $current_file);  
                exit();
            } else {
                echo'Incorrect file type! Allowed:';
                echo implode(', ', $allowed);
            }
        }
    }
}

if (empty($user_data['profile'])=== false ) {
    echo '<img src="', $user_data['profile'], '" alt="', $user_data['name'], ' - Profile Image">';   
}
?>

虽然在这一点上,有了这么多嵌套的if语句,我会开始考虑将它整理成一些上传函数或者可能是一个类。

另一种方法是在表单中设置MAX_FILE_SIZE隐藏输入,然后检查$_FILES的{​​{1}}的错误值

HTML

2

PHP

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

显然,这个解决方案可以被Firebug或Web Inspector等人员在表格发布之前更改价值来规避

答案 1 :(得分:1)

According to the manual

  

$_FILES['userfile']['size']

     

上传文件的大小(以字节为单位)。

要使用它:

if($_FILES['profile']['size'] > $limit)
     die('Too large!');`

或者你当然可以这样做:

if(filesize($_FILES['profile']['tmp_name']) > $limit)
     die('Too large!');`

答案 2 :(得分:0)

这应该是你要找的东西:

$_FILES["file"]["size"] - the size in bytes of the uploaded file

来源:

http://www.w3schools.com/php/php_file_upload.asp

答案 3 :(得分:0)

$_FILES['uploaded_file']['size']

应该给你文件的大小。您可以使用if语句

$_FILES['uploaded_file']['type']

如果要查看上传的文件类型