Ham post veri almak

4 Cevap php

Php kılavuzda ne php :/ / girişine göre $HTTP_RAW_POST_DATA multipart/form-data POST-istekleri ile çalışmak ne.

"Php :/ / input ham POST veri okumak için izin verir. It $HTTP_RAW_POST_DATA için daha az bellek yoğun bir alternatif olduğunu ve herhangi bir özel php.ini yönergesine ihtiyaç duymaz. Php :/ / input ile mevcut değildir { [(1)}]. "

Nasıl multipart/form-data formları için ham veri alabilirim?

4 Cevap

Doğrudan cevap: Bunu yapamam. PHP multipart / form-data Content-Type gördüğü zaman, o kendini ayrıştırma ısrar ediyor. Ham veriler sizin için uygun olmayacaktır. Ne yazık ki. Ama etrafında kesmek olabilir.

Ben bir ortak PHP bunu ayrıştırmak değil, multipart / form-data olarak hatalı biçimlendirilmiş veri gönderme ve bu yüzden ben kendimi ayrıştırmak dışarı vererek değil, benzer bir sorun çarptı.

Çözüm? Benim apache conf bu ekledi:

<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>

Bu ayrıştırmak çalışırken PHP engellemek için yeterli / form-data-alternatif, multipart multipart / form-data dan XXX.php gelen isteğin Content-Type değişecek

Bundan sonra nihayet php :/ / girişinden tüm ham verileri okumak ve kendiniz ayrıştırmak.

Bu çirkin, ama daha iyi bir ya da aslında başka bir çözüm bulamadık - kendi taraflarını düzeltmek için ortak soran kısa.

NB! Eğer ben burada açıklanan ne zaman, $ _FILES boş olacaktır.

Ben tam bu uygulamak vermedi, ama çalışması gerekir gibi görünüyor. In Apache conf,

SetEnvIf Content-Type ^(multipart/form-data)(.*) MULTIPART_CTYPE=$1$2
RequestHeader set Content-Type application/x-httpd-php env=MULTIPART_CTYPE
RequestHeader set X-Real-Content-Type %{MULTIPART_CTYPE}e env=MULTIPART_CTYPE

Için Content-Type Ayar application/x-httpd-php PHP bedeni ayrıştırma orijinal sorunu çözmek için görünür ve sorun Norbert Farkas bildirdi: "Apache sends back PHP source code". Body php://input daha sonra mevcut ve X-Real-Content-Type başlığında gerçek içerik türü. Diğer tüm istekler olmalıdır - (MULTIPART_CTYPE değişken benim $_ENV gösterilmesini gibi görünmüyordu, ama yeni başlık yaptım bu başlık sizin için gerekli olmayabilir.) her zamanki gibi ele.

Sayesinde Anti Veeranna bunun çoğu için! :)

EDIT: P.S. Açıkçası Apache özgü, ama PHP diğer yapılandırmaları bazı çok iyi kolay yolları olabilir.

Evet yapabilirsiniz!

file_get_contents ("php :/ / input");

Sen http://php.net/manual/en/wrappers.php.php daha fazla seçenek görebilirsiniz

PHP 5.4 itibariyle, enable-post-data-reading false ve PHP multipart/form-data veri yolunu kesmek olmaz ayarlayabilirsiniz.

http://www.php.net/manual/en/ini.core.php#ini.enable-post-data-reading