Risposta diretta: non puoi farlo. PHP insiste nel parsing stesso, ogni volta che vede il Content-Type multipart/form-data. I dati grezzi non saranno disponibili per te. Purtroppo. Ma puoi hackerarci intorno.
Ho riscontrato un problema simile, un partner inviava dati formattati in modo errato come multipart/form-data, PHP non poteva analizzarlo e non lo stava distribuendo in modo da poterlo analizzare personalmente.
La soluzione? Ho aggiunto questo al mio conf apache:
<Location "/backend/XXX.php">
SetEnvIf Content-Type ^(multipart/form-data)(.*) NEW_CONTENT_TYPE=multipart/form-data-alternate$2 OLD_CONTENT_TYPE=$1$2
RequestHeader set Content-Type %{NEW_CONTENT_TYPE}e env=NEW_CONTENT_TYPE
</Location>
Questo cambierà il Content-Type della richiesta in arrivo per XXX.php da multipart/form-data per multipart/form-data-alternativo, che è sufficiente per bloccare PHP dal tentativo di analizzarlo
Dopo questo puoi finalmente leggere l'intero file raw da php: // input e analizzarlo da solo.
È brutto, ma non ho trovato una soluzione migliore o di fatto qualsiasi altra soluzione, a meno che non chieda al partner di sistemare la propria parte.
NB! Quando fai ciò che ho descritto qui, $ _FILES sarà vuoto.
fonte
2009-09-01 10:24:24
Se è per il bene di contare byte, non puoi combinare il conteggio di $ HTTP_RAW_POST_DATA byte con il numero di byte di qualsiasi $ _FILES? – karim79
@ karim79, perché non lo è. – Pacerier