2016-04-15 27 views
0

形式//輸入我們通過通過PHP訪問原始POST:與內容類型的multipart/form-data的工作不

$postPayload = file_get_contents('php://input'); 

通常工作有代理PHP腳本和訪問POST表單數據。

(之所以不使用$_POST的是,我們有時具有PHP抑制重複的表單輸入名稱)

現在我們有

<form name="form" method="post" 
    action="/script.php" enctype="multipart/form-data"> 

形式在這種情況下file_get_contents('php://input');返回一個空字符串。

它可以與

curl 'http://localhost/script.php' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://localhost/script.php?commandCode=NO_AUTH_REGIST_OPEN_USER&amp;lang=de' -H 'Origin: http://misumi-europe.com.orange.imi.local' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36' -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryk3IVneARm3kqJ0fs' --data-binary $'------WebKitFormBoundaryk3IVneARm3kqJ0fs\r\nContent-Disposition: form-data; name="commandCode"\r\n\r\nNO_AUTH_NEXT\r\n------WebKitFormBoundaryk3IVneARm3kqJ0fs\r\n' --compressed 

被複制如何訪問在這種情況下RAW POST數據?

+2

可能重複[獲取原始發佈數據](http://stackoverflow.com/questions/1361673/get-raw-post-data) – fusion3k

回答

-2

multipart/form-data不發送到php://輸入,只發送給$ _POST。

在php.ini中你可以設置enable-post-data-reading=off來改變這個,但是$ _POST將總是爲空。見http://php.net/manual/en/ini.core.php#ini.enable-post-data-reading

你可能會使用的.htaccess

php_value enable-post-data-reading off 

還有一個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> 

參見:Get raw post data

+0

對不起,我已經寫了一半的答案,當我發現重複,所以我添加了鏈接。我也投票結束... – PiTheNumber

+1

不,我寫了第一部分。發現Apache的黑客,添加了一個鏈接,並複製了重要的部分[因爲每個人都應該](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-好的答案)。我沒有刪除我的答案,因爲它總結了我找到的所有內容,並且還添加了.htaccess,因爲OP抱怨無法更改服務器上的這些設置。但無論如何,請隨意投票。 – PiTheNumber

2

我能解決它就像這樣在.htaccess

<Files "script.php"> 
# make post data always available in the proxy 
php_flag enable_post_data_reading 0 
</Files>