Domanda

PHP 4.4 e PHP 5.2.3 sotto Apache 2.2.4 su Ubuntu.

Sto eseguendo Moodle 1.5.3 e recentemente ho avuto un problema durante l'aggiornamento di un corso. La variabile $ _POST è vuota ma solo se è stato inserito molto testo nell'area di testo nel modulo. Se viene inserito solo un breve testo, funziona bene.

Ho aumentato post_max_size da 8M a 200M e aumentato memory_limit a 256M, ma questo non ha aiutato. Ho raddoppiato LimitRequestFieldSize e LimitRequestLine su 16380 e impostato LimitRequestBody su 0 senza alcun miglioramento.

Ho cercato su Google una risposta ma non sono riuscito a trovarne una.

Le intestazioni HTTP su Firefox mostrano la dimensione del contenuto di 3816 con i dati corretti, quindi non arriva a $ _POST.

Il sistema funzionava bene fino a poche settimane fa. L'unica modifica è stata / etc / hosts per correggere un problema HELO con il server di posta elettronica exim4.

Posso replicare il problema su una macchina di sviluppo che ha exim4 non in esecuzione, quindi penso che sia solo una coincidenza.

Grazie per la tua assistenza.

È stato utile?

Soluzione

Potrebbe non essere la dimensione correlata del post, ma quanto è lunga la linea prima di una nuova linea. Se usano la vista Moodle WYSIWYG l'html verrebbe semplicemente messo in una riga senza interruzioni. Se vai in HTML e premi Invio ogni 1000 caratteri, funziona?

Altri suggerimenti

Non so abbastanza per fornire davvero una risposta utile, quindi la seguente è più un'ipotesi ben educata (almeno lo spero).

Innanzitutto, è necessario eseguire il debug dell'intera richiesta, tramite access_log o, ad esempio, tramite firebug . (Buono ad avere Firebug comunque.) Per me il tuo problema suona come un reindirizzamento avviene nel mezzo. Ti faccio un esempio:

Supponi che questa sia la tua struttura:

/form.php
/directory/index.php

Questo è il tuo modulo:

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

Il problema in questo caso è che anche se / directory è un URL valido, Apache ti reindirizzerà ancora una volta a / directory / , quindi stai perdendo il tuo payload (ciò che dovrebbe essere in $ _POST ).

Qual è l'enctype del modulo? Potrebbe essere che limita la quantità di dati inviati tramite il modulo.

Potresti anche voler controllare i dati grezzi $ _POST in entrata con:

file_get_contents('php://input');

Per assicurarsi che il loro sia effettivamente l'invio di dati. Ho ricevuto questi suggerimenti qui .

Sembra un problema di integrazione di Apache o Apache / PHP. Se $ _POST è vuoto, suggerirebbe che il server http non sta fornendo le informazioni POST a PHP. Se fossi in te, analizzerei la configurazione di Apache.

Questo è ovvio, ma hai riavviato /etc/init.d/apache2?

Inoltre, il file error_log dovrebbe mostrare alcune informazioni sul fatto che la dimensione del post abbia superato il limite impostato. Valuta di aumentare la tua verbosità per la risoluzione del problema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top