La documentazione PHP states che php://input
può essere letta solo una volta.Perché php: // input può essere letto più volte nonostante la documentazione indichi altrimenti?
Nella mia applicazione ho bisogno di leggerlo due volte, una volta per scopi di autenticazione e una volta per l'elaborazione effettiva del contenuto, ed entrambe le funzioni sono gestite da diversi moduli indipendenti. La cosa pazzesca è: funziona.
Posso contare su questo funzionamento in tutto il mondo, o si tratta di un problema nella mia versione di PHP (5.2.10)? L'unica documentazione che posso trovare su questo è quella che afferma che non dovrebbe funzionare, senza menzionare la limitazione della versione.
Seguendo un'intuizione Dennis', ho fatto questo test:
$in = fopen('php://input', 'r');
echo fread($in, 1024) . "\n";
fseek($in, 0);
echo fread($in, 1024) . "\n";
fclose($in);
echo file_get_contents('php://input') . "\n";
Curling:
$ curl http://localhost:8888/tests/test.php -d "This is a test"
This is a test
This is a test
Apparentemente è limitata a un solo leggere ogni handle aperto.
Un po 'più di scavo ha rivelato che in effetti php://input
può essere letto solo una volta, mai, per le richieste PUT. L'esempio precedente utilizzava una richiesta POST.
... e ora, 4,5 anni dopo, PHP 5.6 ufficialmente [supporta] (http://docs.php.net/manual/en/migration56.new-features.php) leggendo da 'php: // input 'più di una volta, e anche cercare le operazioni :) –
Per quelli di noi non ancora su PHP 5.6, avvolgendo' file_get_contents ('php: // input') 'in una funzione che memorizza nella cache il risultato e la chiamata che invece è un lavoro fattibile -in giro. – Umbrella