Na MAX_FILE_SIZE
Przeczytaj to:
... Na http://pk.php.net/manual/en/features.file-upload.post-method.php i równoważne lokalizacje w innych formatach, stwierdza się, że przeglądarek uwzględni wartość pola formularza MAX_FILE_SIZE do rachunku.
Informacje powtarza się w innych miejscach w internecie i w książkach, ale wydaje się pochodzić z dokumentacji PHP (to nie pojawia się w względem innych technologii server-side).
Nie ma nic w żadnej z HTML, HTTP lub pokrewnych specyfikacji wskazać że jest to przypadek (w szczególności RFC 1867, która wprowadziła plik przesłane do HTML nie wspominając już, więc to nie jest nawet przypadek kludge , który został wymieniony w pierwszym RFC, a następnie został usunięty), ani nie ma znaczenia w kontekście specyfikacji HTML (nie ma nic, co by wskazywało na związek między tym konkretnym ukrytym wejściem a wejściowym plikiem) . Jedyne oświadczenia na temat ukrytych pól, które mogłem znaleźć w którymkolwiek z nich, to ostrzeżenia w sekcjach dotyczących czynników ochrony przed użytkownikami-agentami w oparciu o operacje związane z plikami na czymkolwiek wspomnianym w ukrytym polu .
Brak przeglądarek, które wykonują to jako "rozszerzenie". Rzeczywiście, biorąc pod uwagę, że ma potencjalnie inne możliwe znaczenie dla ukrytego pola o nazwie , która ma nazwę w aplikacji obsługującej kilka plików do przesłania, będzie ona uznawana za wadę konstrukcyjną jakiejkolwiek innej.
Uważam, że nie ma takiego mechanizmu w przeglądarkach głównego nurtu (jeśli w ogóle jest on dostępny) i tak naprawdę nie powinien być. Odniesienie do niego powinno zostać usunięte z dokumentacji .
Sugeruję, że skoro ten pomysł rozpowszechnił się z tej dokumentacji gdzie indziej, notatka o tym, że nie działa, powinna być dodana jako .
Jeśli mechanizm jest wymagane lub pożądane dla szybszego operowania tym rodzaju plików przenoszenia problem to wymaga funkcjonalności, aby umożliwić PHP przechwytywać strumienie są przesyłane przed zakończeniem żądania, które byłaby zupełnie inna jak ta dokumentacja sugerować to powinno być rozpatrywane, nawet gdyby to była prawda ...
kod poniżej pochodzą z wdrożenia php SWFUpload:
// Check post_max_size (http://us3.php.net/manual/en/features.file-upload.php#73762)
$POST_MAX_SIZE = ini_get('post_max_size');
$unit = strtoupper(substr($POST_MAX_SIZE, -1));
$multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));
if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
header("HTTP/1.1 500 Internal Server Error");
echo "POST exceeded maximum allowed size.";
exit(0);
}
// Validate the file size (Warning the largest files supported by this code is 2GB)
$max_file_size_in_bytes = 2147483647;
$file_size = @filesize($_FILES[$upload_name]["tmp_name"]);
if (!$file_size || $file_size > $max_file_size_in_bytes) {
HandleError("File exceeds the maximum allowed size");
exit(0);
}
+1; dobre dochodzenie. – strager
'musisz sprawdzić, czy przesłany plik był mniejszy niż MAX_FILE_SIZE używając PHP' no, nie robisz tego. Po prostu pozbyć się tego bezużytecznego pola –
"wymaga funkcjonalności, aby umożliwić PHP przechwytywanie strumieni przesyłanych przed zakończeniem żądania" -> PHP może przechwycić żądanie, jeśli jego długość przekracza limit określony w 'post_max_size', ale wymaga przesłania do nagłówka żądania przeglądarki zawierającego 'Content-Length' i tylko ze współczesnych przeglądarek Opera wydaje ten nagłówek. –