2012-07-31 14 views
9

ben zaten gerekli çalışmaları yapmış düşündüğü için benim hata günlüğünde yukarıda belirtilen hata bulmak oldukça sürpriz ben benim PHP komut hatası yakalamak:PHP Uyarı: n bayt POST içerik-uzunluk hattında Bilinmeyen içinde 3.145.728 bayt sınırını aşan 0

memory_limit = 128M 
post_max_size = 3M 
upload_max_filesize = 500K 

Ben 3M 3145728 bayt eşdeğer olduğunu anlamak ve bu ne anlama olduğunu: benim php.ini komut dosyasında

if ($_FILES['image']['error'] == 0) 
{ 
// go ahead to process the image file 
} 
else 
{ 
// determine the error 
switch($_FILES['image']['error']) 
{ 
    case "1": 
    $msg = "Uploaded file exceeds the upload_max_filesize directive in php.ini."; 
    break; 
    .... 
} 
} 

, ilgili ayarlar hatayı tetikliyor. Dosya boyutu 500k'ın üzerinde ancak 3M'den küçükse, PHP betiği $msg numaralı hata mesajını case 1'a göre yayınlayarak normal çalışabilir.

nasıl sonrası boyutu bellek sınırı içinde hala iyi post_max_size aşıyor ama ne zaman komut dosyası bir PHP uyarı ile aniden sona icar yerine bu hatayı yakalamak mı? here, here ve here gibi benzer sorulara baktım, ancak bir cevap bulamadım.

+0

Neden işlevinizi bir "try..catch" bloğuna sarmıyorsunuz? – inhan

+0

'error_reporting (E_ALL & ~ E_WARNING);' PHP uyarılarını kapatmak için. – fdomig

+0

@fdomig Mutlak son çare olmalı. –

cevap

14

doğrudan hata ile uğraşmaz alternatif bir çözüm bulundu. Aşağıdaki kod onun blog bir yazılım mühendisi Andrew Curioso tarafından yazılır:

if($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) && 
    empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0) 
{ 
    $displayMaxSize = ini_get('post_max_size'); 

    switch(substr($displayMaxSize,-1)) 
    { 
    case 'G': 
     $displayMaxSize = $displayMaxSize * 1024; 
    case 'M': 
     $displayMaxSize = $displayMaxSize * 1024; 
    case 'K': 
     $displayMaxSize = $displayMaxSize * 1024; 
    } 

    $error = 'Posted data is too large. '. 
      $_SERVER[CONTENT_LENGTH]. 
      ' bytes exceeds the maximum size of '. 
      $displayMaxSize.' bytes.'; 
} 

olarak yazısında, post boyutu post_max_size, aştığında $_POST ve $_FILES süper küresel diziler boş olacak açıklanmıştır. Dolayısıyla, bunları test ederek ve POST yöntemini kullanarak gönderilen bazı içeriklerin olduğunu doğrulayarak, böyle bir hatanın meydana geldiği sonucuna varılabilir.

aslında daha önce bulmak başaramadı benzer soru here yoktur.

1

Sen yükleme bile gerçekleşir ilk önce javascript ile bunu kontrol edebilir?

// Assumed input for file in your HTML 
<input type="file" id="myFile" /> 


//binds to onchange event of your input field 
$('#myFile').bind('change', function() { 
    alert(this.files[0].size); 
}); 

Ayrıca etrafında bir deneyin catch pop:

try 
{ 
    if (!move_uploaded_file('blah blah')) 
    { 
     throw new Exception('Too damn big.'); 
    } 
    // Can do your other error checking here... 
    echo "Upload Complete!"; 
} 
catch (Exception $e) 
{ 
    die ('File did not upload: ' . $e->getMessage()); 
} 
+1

kullanıcı javascript etkin olmayabilir. –

+0

+1, bu sorunu tam olarak çözemeyebilir, ancak iyi bir öneri olabilir. – Rab

+0

@QuestionOverflow Gerçek olsa da, bugün olan her şey bir milyonda 1'dir; JS engelli – asprin