Wie um zu verhindern Warning: POST Content-Length und Speicher Größe
Derzeit bei user-uploads ein Foto der Seite sagt "Warning: POST Content-Length of XXX bytes übersteigt die Grenze von 21000000 bytes in Unknown on line 0".
Ich weiß, was das bedeutet und ich bin NICHT auf der Suche nach der solultions wie die Erhöhung der max_upload Werte oder sogar memory_size_limit... Da können Benutzer und Benutzer wird hochladen Terabyte Unsinn, auch wenn Sie explizit sagen, Sie nur max 20 MB-Dateien, und nur Bilder sind erlaubt.
Ich bin auf der Suche nach einer Lösung auf:
- , Wie um zu verhindern, dass diese Warnung(en) auf einmal passieren?
ODER zumindest: - Wie verhindern die Anzeige dieser Warnung(en)?
EDIT:, BITTE LESEN ! - Bitte haben Sie Verständnis, dass natürlich bin ich Umgang mit dem Fehler/Warnung nach (da Zeile 1) , das problem ist dies geschieht auf einem virtuellen "Linie 0", dass ist der Grund, warum ich mich verstecken muss oder der Fehler verhindern, dass es zu heben - denn ich kann nicht jede code vor der Stelle, wo der Fehler passiert.
EDIT2: Schließlich nach einer sehr langen Forschung und Graben habe ich eine Idee - es funktionierte - siehe meine eigene Antwort.
- Verhindern, dass die Anzeige der Fehler bedeutet nicht, löst das problem aber vorbei ist es. Ich weiß nicht ermutigen. Sie können überprüfen, dass die Datei die Größe vor dem hochladen (auf modernen Browsern HTML5-Datei-API), überprüfen Sie es heraus: stackoverflow.com/a/11514290/998096
- Nutzer können und sollen sich verweigert, indem Sie Ihre web-server, wenn Sie Anfrage senden zu groß, nicht zu verstecken einen Fehler wegen Speicher erschöpft. Aber wenn Sie nicht auf der Suche nach Lösung, wie man es richtig macht, warum dann die Mühe mit dem verstecken der Nachricht?
- Ich weiß, aber es gibt immer jemanden, der bypass der client-Seite prüfen, ich bin auf der Suche nach server-side-Lösung
- Ich brauchen, um den Fehler in der PHP zu sagen, der Benutzer "hey, die Sie hochladen, zu viel" , aber das problem ist das passiert, VOR dem Skript... Also haben Sie eine Lösung wie das geht?
- Es ist lustig, wie jeder auf StackOverflow sofort davon ausgegangen, dass Sie etwas falsch machen, wenn Sie eine Frage stellen wie diese. Traurig ist, dass in vielen Fällen diese Menschen könnte richtig sein. Aber in diesem Fall diejenigen Menschen, sollte realisiert haben, dass die grundlegende Regel des HTTP-requests hier gilt: Sie können nie das Vertrauen, was ein browser/client sendet.
- andrewcurioso.com/blog/archive/2010/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also nach der Suche, anstatt zu arbeiten, heute habe ich endlich eine Idee, wie dieses Problem zu lösen, es funktionierte, und auch nicht viel Schaden verursachen. Aber bitte zuerst verstehen, was Sie tun, bevor Sie es tun. 🙂 Als ich vorschlug, in einem meiner Kommentare ist es wirklich möglich, schalten Sie PHP-Fehler .htacess - einfach abschalten die PHP startup-Warnungen.
, Bevor Sie die Lösung:
Beachten Sie, dass: nach fügen Sie diesen code in Ihre .htaccess-Sie werden nicht in der Lage, um zu sehen, alle
startup-Fehler
Beachten Sie auch, dass: gibt es mehr start-up-Fehler in Zeile "0" ist als diese.
Tun vor: Bevor Sie dies tun, sollten Sie bereiten Sie Ihr Skript in der Weise, dass Sie sollten überprüfen, die hochgeladenen Inhalte zu Größe und geben Benutzer eine ordnungsgemäße Meldung. Die Tatsache, dass die Warnung nicht NICHT bedeutet, dass Sie sollten nichts dagegen tun. Es bedeutet das GENAUE entgegengesetzte - man sollte alles tun, was Sie können, etwas zu machen, zumindest in der Nähe-gleich um die Warnung zu erhöhen - überprüfen Sie, überprüfen Sie, wenn Sie können, behandeln Fehler und heben Sie Ihre eigenen Fehlermeldung.
Fügen Sie diese zu Ihrem .htaccess:
php_flag display_startup_errors off
Es ist nicht, dass das böse, wie es scheint:
Bitte beachten Sie, dass diese deaktiviert startup-Fehler nur.
So alle regulären PHP Fehler/warnings/notices bleibt 🙂
Auch XAMPP-PHP "selbst" empfiehlt es für die Produktion:
Den
php.ini
Datei buchstäblich sagt:PS: "startup-Fehler" scheint zu sein, diese Fehler vor PHP-Skript ausgeführt wird, selbst - diese Fehler sind in der Regel versuchen zu "überreden", dass Sie Sie auf die Zeile 0.
Dank meiner Idee, und diese Antwort: Deaktivieren der Benachrichtigung und Warnung in PHP innerhalb .htaccess-Datei?
EDIT:, Da dies eine Einstellung php_flag, können Sie natürlich auch festlegen, dass diese standardmäßig in der php.ini wenn Sie benutzerdefinierte instalation von PHP 🙂
Die Frage ist
die Antwort ist, ohne editieren von config-Wert, platzieren Sie den code am Anfang der Datei, erhalten das Formular verarbeitet werden:
Ist. Nicht mehr Achtung, als auch etwas, was Sie nicht wollen als Ausgang auf Ihrer Seite.
Nach dem, wie vorgeschlagen, anderswo können Sie entscheiden, was zu tun mit:
Vielleicht auch aufteilen der Datei, wenn in einem anderen Weg passieren Sie die korrekten Werte über Datei-Verarbeitung durch Php.
wie hier beschrieben Warning: POST Content-Length ...
Ich habe ein ähnliches problem, Sie, und fragte sich, ob Sie gefunden hatte, eine zufriedenstellende Lösung zu finden. Derzeit, meine "PHP Warning: POST Content-Length of 21010354 bytes exceeds the limit of 8388608' ist in der log, und ich glaube nicht, es ist viel, was ich über es tun können.
Ich habe die Arbeit innerhalb einer Zend framework, und wenn ein Benutzer eine Datei hochlädt, die, wie oben ausgeführt, ist es im Grunde tötet alle den üblichen POST-data-Analyse, so die Antwort auf getParams() enthält keine der üblichen POST-Parameter. Dies bedeutet, dass die Nutzer immer einen Fehler bei der überprüfung, nämlich eines der Felder fehlt, das ist irreführend.
Bei der recherche zu diesem, ich habe gefunden ein paar interessante php_ini-Einstellungen möchten Sie vielleicht, zu betrachten, vor allem enable_post_data_reading und always_populate_raw_post_data. In meinem Fall bin ich das hochladen eines 20M-Datei, mit einer 8M post max und ein 10M hochgeladene Datei max, und das Ergebnis von php://input scheint zu sein, eine vollständige 20M-Datei, auch wenn die post-Daten, ist nun leer.
Also werde ich manuell überprüfen, ob die raw-Daten übersteigt das limit, und davon ausgehen, alles fehlgeschlagen, wenn Sie es getan hat (und die Kaution). Ich schlage vor, Sie könnten Ihren eigenen code schreiben, um eine Analyse der Rohdaten, zum Auffüllen der $_POST-Daten. Dann können Sie den startup-code, wie Sie wollen, und nur dann, wenn Sie fertig sind, überprüfen Sie, ob der Benutzer hochgeladen hat mehr Daten als der Grenzwert. Es ist bis zu Ihnen, um dann einen Fehler zurück, bevor analysiert wird, oder ob es ok ist, zu analysieren. So lange, wie Sie die PHP-post-und upload-limits, um über Ihre Benutzer zu begrenzen, sollte es dem Benutzer erlauben, die Regeln zu brechen, so dass Sie Ihren code zu erkennen, der Verschluss und die sich darüber beklagen.
Hier ist die WAHRE Lösung um zu verhindern, dass dieser Fehler richtig.
Setzen Sie diese Parameter in deiner php.ini :
Warnung : seien Sie sicher, dass Sie diese Zeile in Ihr Formular
UND das WICHTIGSTE :
sicher sein, zu überprüfen, die code-Fehler von $_FILES['Datei']['error']
sicher sein, zu überprüfen, Größe von Ihr hochladen in PHP zu
enable_post_data_reading
ist standardmäßig eingeschaltet (Ausschalten würde bedeuten, es würde auch keine $_POST und $_FILES aufgefüllt) und die Einstellung der letztere mit 2 zu 0 wird ausgeschaltet, server-layer-limit komplett, so sind Sie im Grunde erlaubt zu setzen, in-Prozess-Dateien BELIEBIGER Größe...Wie Sie bereits selbst heraus gefunden, es ist unmöglich, es zu tun in PHP, da PHP nur die Fehler abfangen von Zeile 1 ab.
Die einzige Art und Weise wäre, zu Graben, in den PHP-source-code finden, wo der Fehler geworfen wird, und entfernen Sie den Teil aus PHP-Quellen vor dem kompilieren Ihres Kostüms php-version.
Aber seien Sie gewarnt, dass die Fehlermeldung geworfen wird, für einen Grund.
Um zu Verhindern, dass dieser Fehler geschehen, müssen Sie überprüfen Sie die Größe der hochgeladenen Dateien, bevor und falls Sie zu groß, müssen Sie stornieren den upload!
Einfach nicht zeigen Sie Ihnen, ich denke, es sollte ausreichen, wenn Sie schreiben Sie in Ihre php-Skript
1.Sie können überprüfen Sie die Dateigröße vor dem Upload in JavaScript, aber dies kann verändert werden !
2.Überprüfen Sie die Größe der Datei nach hochgeladen und vor speichern der Datei.
3.Nicht versuchen, das ausblenden der Fehler, das problem zu lösen.