0

PHP の写真アップロード スクリプトに問題があります。2MB を超えるファイルをアップロードすると、[アップロード] をクリックしてもエラーは表示されませんが、スクリプトに含まれています。たとえば。.wma ファイルをアップロードしましたが、2.38MB でした..これは制限を超えています..しかし、「ファイルの種類は許可されていません」とだけ表示されますが、なぜ 2MB を超えるエラーも表示されなかったのですか?

これが私のスクリプトです:

<?php
include 'init.php';

if(!logged_in()){
header('Location: index.php');
exit();
}

include 'template/header.php';
?>

<h3>Upload Image</h3>

<?php

if(isset($_FILES['image'], $_POST['album_id'])){
$image_name = $_FILES['image']['name'];
$image_size = $_FILES['image']['size'];
$image_temp = $_FILES['image']['tmp_name'];

$allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
$image_ext = strtolower(end(explode('.', $image_name)));

$album_id = $_POST['album_id'];

$errors = array();

if (empty($image_name) || empty($album_id)){
    $errors[] = 'Something is missing';
} else {

    if(in_array($image_ext, $allowed_ext) === false){
        $errors[] = 'File type not allowed';
    }

    if($image_size > 2097152){
        $errors[] = 'Maximum file size is 2MB'; 
    }

    if(album_check($album_id) === false){
        $errors[] = 'Couldn\'t upload to that album';
    }

}

if(!empty($errors)){
    foreach ($errors as $error){
        echo $error, '<br />';
    }
} else {
    // upload image
}
}

$albums = get_albums();

if(empty($albums)){
echo '<p>You don\'t have any albums. <a href="create_album.php">Create an album</a></p>';
} else {
?>

<form action="" method="post" enctype="multipart/form-data">
<p>Choose a file:<br /><input type="file" name="image" /></p>
<p>
Choose an album:<br />
<select name="album_id">
    <?php 
    foreach ($albums as $album){
        echo '<option value="', $album['id'], '">', $album['name'], '</option>';
    }
    ?>
</select>
</p>
<p><input type="submit" value="Upload" /></p>
</form>

<?php
}

include 'template/footer.php';
?>

経験豊富な多くのプログラマーのために、私のおそらく簡単な投稿に忍耐強く感謝します! -TechGuy24

4

1 に答える 1

1

コードによると、アップロードされたファイルのサイズが 2 MB を超える場合は、そうする必要があります。しかし、コンピューターは決してミスを犯すことはありませんが、人間とデバッグは重要です。

コードを差し替えるだけ

if($image_size > 2097152){
    $errors[] = 'Maximum file size is 2MB'; 
}

デバッグ ステートメントで

if($image_size > 2097152){
    echo "in if, image size=".$image_size;
    $errors[] = 'Maximum file size is 2MB'; 
} else {
    echo "in else, image size=".$image_size;
}

これはデバッグの最初のステップにすぎません。本当の原因を解決する場合としない場合があります。出力をお知らせください。

コメント後に編集:

そのコードをファイルの先頭に置きます。

echo "files<pre>";
print_r($_FILES);
echo "</pre>imgsz=".$_FILES['image']['size'];

出力は何ですか。多分含まれると思います

[error] => 1

error=1 と表示される場合は、http://php.net/manual/en/features.file-upload.errors.phpを確認してください。

つまり、php.ini の upload_max_filesize が 2MB 以下に設定されています。それよりも大きなファイルをアップロードすると、PHP はデフォルトでファイルを拒否するため、コードに到達することはありません。

これを修正するには、php.ini を開き、upload_max_filesize の制限を増やします。

コメントの後に 3 を編集

変化する

if($image_size > 2097152){

if($_FILES['image']['error']==1){

これで問題は解決します。

于 2012-08-31T17:43:29.620 に答える