2008-10-23 11 views
5

PHP 4.4 und PHP 5.2.3 unter Apache 2.2.4 auf ubuntu gepostet wird.Warum ist _POST manchmal leer, wenn ein Textarea in PHP

Ich laufe Moodle 1.5.3 und hatte kürzlich ein Problem beim Aktualisieren eines Kurses. Die Variable $ _POST ist leer, aber nur, wenn viel Text in die Textfläche des Formulars eingegeben wurde. Wenn nur ein kurzer Text eingegeben wird, funktioniert es gut.

Ich habe die post_max_size von 8M auf 200M erhöht und die memory_limit auf 256M erhöht, aber das hat nicht geholfen. Ich habe LimitRequestFieldSize und LimitRequestLine auf 16380 verdoppelt und LimitRequestBody ohne Verbesserung auf 0 gesetzt.

Ich habe nach einer Antwort gegoogled, konnte aber keine finden.

HTTP-Header auf Firefox zeigt die Inhaltsgröße von 3816 mit den richtigen Daten, so dass es nur nicht zu $ ​​_POST.

Das System lief bis vor ein paar Wochen in Ordnung. Die einzige Änderung war/etc/hosts, um ein HELO-Problem mit dem exim4-E-Mail-Server zu beheben.

Ich kann das Problem auf einer Entwicklungsmaschine replizieren, die exim4 nicht ausgeführt hat, also denke ich, dass es nur Zufall ist.

Danke für Ihre Hilfe.

+0

Bizarr. Haben Sie den genauen Schwellenwert identifiziert? Details könnten für diejenigen nützlich sein, die das Problem reproduzieren möchten. –

+0

Sie sagten, es gibt keine Probleme mit kleinen Mengen von Text: Haben Sie das ungefähre Limit gefunden? – nickf

+0

Dies kann offensichtlich sein, aber haben Sie überprüft, dass das Formular tatsächlich POST verwendet, und nicht GET? – troelskn

Antwort

1

Könnte es nicht die Größe des Beitrags sein, aber wie lange die Zeile vor einer neuen Zeile ist. Wenn sie die Moodle WYSIWYG-Ansicht verwenden, wird der HTML-Code einfach in eine Zeile ohne Unterbrechungen eingefügt. Wenn du in html gehst und alle 1000 Zeichen zurückkommst, funktioniert das?

0

Es klingt wie ein Apache oder Apache/PHP-Integrationsproblem. Wenn $ _POST leer ist, würde dies andeuten, dass der HTTP-Server die POST-Informationen nicht an PHP übermittelt. Wenn ich du wäre, würde ich die Apache-Konfiguration untersuchen.

+0

HTTP Live Header (eine Firefox-Erweiterung) zeigt den POST-Inhalt korrekt an. – Puzzled

0

Das ist offensichtlich, aber haben Sie /etc/init.d/apache2 neu gestartet?

Außerdem sollte die Datei error_log einige Informationen darüber enthalten, ob die Postgröße das festgelegte Limit überschritten hat. Erhöhen Sie Ihre Ausführlichkeit, um das Problem zu beheben

1

Was ist der Datentyp des Formulars? Könnte sein, dass es die Anzahl der über das Formular gesendeten Daten begrenzt.

Sie könnten auch mit den eingehenden rohen $ _POST Daten überprüfen mögen:

file_get_contents('php://input'); 

Um sicherzustellen, dass ihre Daten senden tatsächlich ist. Haben Sie diese Vorschläge here.

+0

ist es auch leer – Puzzled

2

Ich weiß nicht genug, um wirklich eine nützliche Antwort zu geben, so ist das folgende mehr eine gut erzogene Vermutung (zumindest hoffe ich es).

Zuerst sollten Sie die gesamte Anfrage debuggen, entweder durch access_log oder zum Beispiel durch firebug. (Gut, Firebug sowieso zu haben.) Ihr Problem klingt wie eine Weiterleitung passiert dazwischen.Ich gebe Ihnen ein Beispiel:

Angenommen, dies ist Ihre Struktur:

/form.php 
/directory/index.php 

Das ist Ihre Form:

<form action="/directory" method="post"> 
... 
</form> 

in diesem Fall Problem ist, dass, obwohl /directory eine gültige URL ist, Apache wird Sie noch einmal auf /directory/ umleiten, damit verlieren Sie Ihre Payload (was in $_POST sein soll).