1

我有以下 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

4 回答 4

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 隐藏输入,然后检查错误$_FILES2

HTML

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

PHP

if ($_FILES['profile']['error'] == 2) {
    die('File too large');
} else {
    // upload code
}

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

于 2013-05-07T16:11:26.120 回答
1

根据手册

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

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

要使用这个:

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

或者,您当然可以这样做:

if(filesize($_FILES['profile']['tmp_name']) > $limit)
     die('Too large!');`
于 2013-05-07T16:07:06.163 回答
0
$_FILES['uploaded_file']['size']

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

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

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

于 2013-05-07T16:03:56.053 回答
0

这应该是您正在寻找的:

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

资源:

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

于 2013-05-07T16:02:57.347 回答