beklenmeyen bir hata dönmeden php $ _FILES hata kodu

1 Cevap

Kullanıcıların aynı anda birden fazla dosya yüklemenize olanak sağlar bazı kodlar var. Bu yükleme işleminden sonra belirli bir noktaya alma asla, bu yüzden hata kodu değeri sınamak için bir yankı koymak, ve ben anlıyorum emin değilim bir değer dönüyor. İşte kod:

    $tmpTarget = PCBUG_UPLOADPATH;
    foreach ($_FILES["attachments"]["error"] as $key => $error) {
       if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES["attachments"]["tmp_name"][$key];
            $name = str_replace(" ", "_", $_FILES["attachments"]["name"][$key]);
            move_uploaded_file($tmp_name, "$tmpTarget/$name");
            @unlink($_FILES["attachments"]["tmp_name"][$key]);
        }
        else {
            $errorFlag = true;
            echo "error = $error";
            exit;
        }
    }

Ekleri alan oluşturur kod şöyle görünür:

for($i=1; $i<=$max_no_img; $i++){
    echo "<input type=file name='attachments[]' class='bginput'><br />";
}

$max_no_img kodunda daha yukarı ayarlanmış bir değişkendir, ve PCBUG_UPLOAD yol dahil bir dosyasında tanımlanan bir sabittir.

İşte kafa karıştırıcı budur: benim formu gönderdikten sonra, ben oraya gitmek ve benim yüklenenler dizinde bak, ve ben formu ile seçtiğiniz dosyaları - onlar doğru yükledi. Ancak, kod else bloğu içine atlıyor ve $ hatası hiçbir dosya yüklendiği anlamına gelir the php manual gösterir, 4. dönüyor.

Herhangi bir fikir? Zannediyorsunuz nerede dosyalar çok net alıyorsanız. Bu olmuyor "eklenme" diğer bazı tanımı var mı?

1 Cevap

Bu hata tarayıcı bir dosya göndermek değil ne olur, aynı zamanda gönderilen dosyanın dosya adı boş bir dize olarak PHP tarafından yorumlanır (bkz. main/rfc1867.c).

Bu gibi formda bir charset zorlamak için deneyin:

<form accept-charset="utf-8" enctype="multipart/form-data" method="post" action="dest.php">

Bu işe yaramazsa, dosyalar gönderilen (örneğin wireshark ile) ve sonuçları yayınlayın HTTP isteği kokladım. Başka bir tarayıcı deneyin.

EDIT: Tarayıcınız sadece bir dosya gönderiyor. UPLOAD_ERR_NO_FILE "hiç hiçbir dosya yüklendiği" anlamına gelmez. $_FILES["attachments"]["error"][$n] == UPLOAD_ERR_NO_FILE "hiçbir dosya için $n-inci dosya girişi yüklendiği" demektir.

Content-Type: multipart/form-data; boundary=---------------------------3764294497346
Content-Length: 4113

-----------------------------3764294497346
Content-Disposition: form-data; name="subject"

Ritz Camera Club Presentation
-----------------------------3764294497346
Content-Disposition: form-data; name="meeting_date"

May 2010
-----------------------------3764294497346
Content-Disposition: form-data; name="posted_by"

esthermstrom
-----------------------------3764294497346
Content-Disposition: form-data; name="body"

sdjflksjdflsjf
-----------------------------3764294497346
Content-Disposition: form-data; name="attachments[]"; filename="Log.txt"
Content-Type: text/plain

contents of the file snipped
-----------------------------3764294497346
Content-Disposition: form-data; name="attachments[]"; filename=""
Content-Type: application/octet-stream


-----------------------------3764294497346
Content-Disposition: form-data; name="attachments[]"; filename=""
Content-Type: application/octet-stream


-----------------------------3764294497346
Content-Disposition: form-data; name="attachments[]"; filename=""
Content-Type: application/octet-stream


-----------------------------3764294497346
Content-Disposition: form-data; name="submit"

Post Writeup
-----------------------------3764294497346--