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 に答える