0

この場所のコードを使用しています: Uploading Multiple Files using AJAX

最大 7 つの画像 (サイズは約 1MB) がアップロードされ、8 番目の画像 (または 8 つ以上の画像を選択した場合) を実行すると、次のエラーが返されます。

注意: 未定義のインデックス: E:\Apache Software Foundation\Apache2.2\htdocs\ReGeneSys\upload2.php の 10 行目の画像

警告: E:\Apache Software Foundation\Apache2.2\htdocs\ReGeneSys\upload2.php の 10 行目の foreach() に無効な引数が指定されました

HTML は次のとおりです。

<div id="main" style="width:40%;margin:0 auto;text-align:center;" ><br/>
        <h4>Use this if you want to upload multiple images</h1>
        <form method="post" enctype="multipart/form-data"  action="upload2.php">
            <input type="file" name="images" id="images" multiple />
            <input type="hidden" name="logId" id="logId" value="<?php echo $_REQUEST['log_id'] ?>" />
            <button type="submit" id="btn">Upload Files!</button>

        </form>

    <div id="response"></div>
        <ul id="image-list">

        </ul>
    </div>

JS は次のとおりです。

var logId= document.getElementById("logId").value; 
//alert(logId);
(function () {
    var input = document.getElementById("images"), 
        formdata = false;

    /* function showUploadedItem (source) {
        var list = document.getElementById("image-list"),
            li   = document.createElement("li"),
            img  = document.createElement("img");
        img.src = source;
        li.appendChild(img);
        list.appendChild(li);
    }  */ 

    if (window.FormData) {
        formdata = new FormData();
        document.getElementById("btn").style.display = "none";
    }

    input.addEventListener("change", function (evt) {
        document.getElementById("response").innerHTML = "Uploading . . ."
        var i = 0, len = this.files.length, img, reader, file;

        for ( ; i < len; i++ ) {
            file = this.files[i];

            if (!!file.type.match(/image.*/)) {
                if ( window.FileReader ) {
                    reader = new FileReader();
                    /*reader.onloadend = function (e) { 
                        showUploadedItem(e.target.result, file.fileName);
                    };*/
                    reader.readAsDataURL(file);
                }
                if (formdata) {
                    formdata.append("images[]", file);
                }
            }   
        }

        if (formdata) {

            $.ajax({
                url: "upload2.php?logId="+logId,
                type: "POST",
                data: formdata,
                processData: false,
                contentType: false,
                success: function (res) {
                    document.getElementById("response").innerHTML = res; 
                }
            });
        }
    }, false);
}());

PHPは次のとおりです。

$log_id=$_REQUEST['logId'];
    print_r($_FILES);
    foreach ($_FILES["images"]["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {

            $name = $_FILES["images"]["name"][$key];
            $path="screens/";
            $append_Name=getScalar("SELECT (COALESCE(MAX(screen_id),1)+1) FROM screenshots LIMIT 1");
            //print_r($_FILES);
            //$image_name=$_FILES['images']['tmp_name'][$key];
            $name=$append_Name."_".$name;
            move_uploaded_file( $_FILES["images"]["tmp_name"][$key], "screens/" . $name);
            ..// other part of the PHP
        }
    }

注意 getScalar は、結果ソースの最初の値を返す関数です。

7枚目の画像以降に発生する問題を教えてください。もう一度言いますが、約 1MB のサイズの 8 番目の画像をアップロードしていない限り、コードはまったく問題なく動作します。

エラーは次の行にトレースされます。

  foreach ($_FILES["images"]["error"] as $key => $error)

ありがとう。

4

1 に答える 1

0

あなたはこれらを見たいと思うかもしれません:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

$_FILESの最大アップロード サイズが大きすぎる可能性があります。

見知らぬことが起こりました;)

于 2013-08-21T09:29:39.253 に答える