2010-05-21 11 views
7

Mam problemy z narzędziem do przesyłania plików w mojej aplikacji PHP. Wysyłając duże pliki (9 MB +) do formularza, otrzymuję bardzo dziwne zachowanie: dane POST zawarte w formularzu znikają, łącznie z informacjami o pliku.Dane POST znikają przy przesyłaniu dużego pliku

Zwiększyłem już wszystkie limity PHP, jakie mogłem (ograniczenie czasowe, maksymalny czas wejścia, maksymalny rozmiar posta, limit pamięci i maksymalny rozmiar pliku) i nadal nie mogę uzyskać odpowiedniego zachowania. Próbowałem zastąpić zwykłe formularze HTTP rozwiązaniem Flash (SWFUpload, www.swfupload.org), nadal zachowując to samo zachowanie.

Próbowałem wielu plików o podobnych rozmiarach i zdecydowanie nie jest to konkretny problem z plikiem. Mam debugowane vary POST wysłane za pomocą Firebuga, a poprawne zmienne nadal znajdują się w nagłówku wraz z plikiem.

Co tu się dzieje?

+1

Jak o patrząc w logach serwera. Spróbuj wykryć wszelkie błędy/ostrzeżenia. – nc3b

+0

Zrobiłem, nic nie mówiłem. – DfKimera

+0

Mam ten sam problem. Czy rozwiązałeś swój problem? –

Odpowiedz

2

Serwery internetowe można również skonfigurować w celu ograniczenia wielkości żądań. Jeśli używasz Apache, sprawdź dyrektywę LimitRequestBody.

+0

Spojrzałem na konfigurację Apache, nie ma tam dyrektywy LimitRequestBody, więc zakładam jej domyślną wartość (0 lub brak limitu) – DfKimera

+0

Okazało się, że to był problem. Poza ustawieniami WHM/cPanel, które miałem w tym czasie naprawdę trudno było naprawdę zmienić dyrektywę LimitRequestBody. Podniesienie tego + post_max_size, przesłanie maksymalnego rozmiaru i limitu pamięci powinno rozwiązać problem. – DfKimera

+0

Próbowałem zmienić post_max_size, upload_max_size i limit pamięci, ale nadal stoi ten sam problem. –

1

spróbuj przesłać małe pliki o wielkości 1 - 2 MB. Jeśli nadal nie możesz wysłać kodu.

Mam nadzieję, że dodałeś enctype = '/ multipart/form-data' w definicji formularza.

+0

Zrobiłem i małe pliki działają. Problem pojawia się w plikach 8 MB +. Typ jest tam. – DfKimera

0

Na jakim serwerze pracujesz? Myślę, że niektóre systemy operacyjne OS mają zestaw limitów na to, jak duże pliki na to pozwalają. Ta wartość może zostać zmieniona.

1

Ok, myślę, że mam rozwiązanie. Musisz sprawdzić zarówno dyrektywę post_max_size, jak i $_SERVER['CONTENT_LENGTH'], więc jeśli $ _SERVER ['CONTENT_LENGTH'] przekroczy wartość post_max_size, oznacza to, że próbują przesłać zbyt wiele danych.

$POST_MAX_SIZE = ini_get('post_max_size'); 
$mul = substr($POST_MAX_SIZE, -1); 
$mul = ($mul == 'M' ? 1048576 : ($mul == 'K' ? 1024 : ($mul == 'G' ? 1073741824 : 1))); 
if($_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) 
{ 
    $error = true; 
} 

Rozwiązanie wzięte stąd: http://www.php.net/manual/en/features.file-upload.php#73762

Powiązane problemy