6 Stimmen

php-Verhalten bei Überschreitung von post_max_size

Wenn eine POST-Anfrage post_max_size überschreitet, werden die Superglobalen $_POST und $_FILES leer.

Ich habe viele Diskussionen darüber gesehen, wie man dieses Szenario erkennen kann, aber nie eine Erklärung, warum die Superglobalen leer sind. Es erscheint mir wirklich merkwürdig, die POST-Daten zu löschen und den Benutzer zu zwingen, seine Antworten erneut einzugeben. Ist das vielleicht eine Sicherheitsvorkehrung?

Ich bin neugierig auf andere Sprachen (java, .net). Verhalten sie sich ähnlich?

Danke

2voto

Jason Palmer Punkte 721

Wenn ein Array nur 50 Indizes aufnehmen kann und Sie 100 schieben, würden Sie dann erwarten, dass die anderen 50 irgendwo bleiben?

Dies gilt auch für diese Einstellung. Es mag zwar einige POST-Daten geben, die in die maximale Größe passen, aber ein Teil des erwarteten Ganzen würde viel mehr Probleme verursachen als gar keine. Richtig?

Es ist viel einfacher, einen LEEREN Beitrag zu erkennen, als einen unvollständigen Beitrag.

Ich glaube, das ist ihre Begründung.

1voto

Kenny Linsky Punkte 1636

Um einen Teil Ihrer zweiten Frage zu beantworten, mit .NET, wenn die POST größer ist als maxRequestLength (Teil der .NET-Konfiguration), aber kleiner als maxAllowedContentLength (Teil der IIS-Konfiguration) können Sie erstellen. a benutzerdefiniertes HTTP-Modul um an den Teil der Datenbank zu gelangen POST das durchkam.

Ohne das benutzerdefinierte HTTP-Modul, wird einfach eine Ausnahme ausgelöst . Und Sie wollen maxRequestLength der begrenzende Faktor sein, ansonsten wird IIS anstelle von .NET damit umgehen .

0voto

gview Punkte 14129

Ich kann nicht für den Implementierer sprechen, aber der Code ist auf diese Weise einfacher. Da die Superglobalen gekocht werden, müssten sie Entscheidungen darüber treffen, wie Teilbeiträge zu behandeln sind, was bei vielen Leuten unweigerlich zu Verwirrung führen würde. Es gibt auch die Alternativen von:

$data = file_get_contents('php://input');

oder mit Blick auf $HTTP_RAW_POST_DATA obwohl afaik, keiner von ihnen funktioniert mit multipart/form-data .

0voto

hohner Punkte 11230

Das ist eine wirklich frustrierende und bizarre Facette des PHP-Codes. Manche sagen, es sei schlampiges Design, aber hey, es ist ein Problem, das leicht vermieden werden kann - und, wenn überhaupt, ist es etwas, das nur bestätigen sollte, wie wichtig UI und Datentransfer-Design ist.

Bei Formularen, die an übermäßige ini-Einstellungen gebunden sind (Datei-Uploads, viel Text, etc.), lade ich die Daten immer asynchron in ein tmp-Verzeichnis hoch, das täglich gelöscht wird. Wenn das Formular abgeschlossen ist (nun ohne viele Daten), werden die Dateien an einen festen Ort übertragen.

Sie können immer überprüfen, ob etwas schief gelaufen ist, indem Sie Ihre Formularverarbeitungsmethode mit etwas wie:

if(empty($_POST))
{
  // show error to user
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X