我已經嘗試了所有這些方法,可以發現已經爲其他人工作,但沒有運氣。如何使用Apache 2.2上的PHP 5.4從PUT請求中獲取數據
這裏是我的PHP代碼:
parse_str(file_get_contents("php://input"), $put_data);
echo "foo is: " . $put_data['foo'] . "\n";
無論我怎麼努力,我得到「foo是:」
我想這是針對Apache作爲Nginx上運行相同的腳本服務器顯示預期的「foo是:酒吧」
事情我已經與結果沒有改變的嘗試:
更改我的Content-Type頭到應用程序/ x-WWW的形式進行urlencode d。
$put_data = fopen("php://input", "r");
$data = stream_get_contents($put_data);
echo "data is: " . $data;
fclose($put_data);
這裏是響應頭:
添加LimitExcept中指導我的Apache的配置,像這樣
<Directory "/MyApp/Directory/">
Allow From All
AllowOverride All
<LimitExcept GET POST PUT OPTIONS DELETE>
Deny from All
</LimitExcept>
</Directory>
使用stream_get_contents像這樣(是的,我做了更改後重新啓動):
Date: Wed, 11 Jun 2014 04:03:09 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.24 mod_ssl/2.2.26 OpenSSL/0.9.8y
X-Powered-By: PHP/5.4.24
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 7
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
感謝任何可以提供幫助的人。現在把我的頭髮留在這個小時裏。
剛剛在Apache 2.2上使用'curl -X PUT「http://my/test.php」-d foo = bar「在PHP 5.5.7上進行了本地測試,它工作得很好。你能證明你是如何提出請求的嗎? – Phil
我已經完成了很多不同的工作,但最新的版本是使用DHC Chrome應用程序,它專門爲測試REST API而構建。 https://chrome.google.com/webstore/detail/dhc-rest-http-api-client/aejoelaoggembcahagimdiliamlcdmfm顯然,我將方法設置爲PUT,並嘗試了請求正文中的各種組合(例如foo = bar) 。 – evanmcd
你可以嘗試通過捲曲?使用上面使用的相同命令,但也可以添加'-v'標誌以獲得額外的調試輸出。然後,將結果粘貼到您的問題 – Phil