[英]Unable to access HTTP PUT data in webservice code
所有,
作為我正在編寫的應用程序的一部分,我需要有一個HTTP PUT Web服務,該服務接受傳入的圖像數據,該數據將經過分析,驗證並添加到本地文件存儲中。
我的問題出現在尺寸驗證后,因為
$_SERVER['CONTENT_LENGTH']
的值大於0,並且該值與測試文件的大小相同,因此我可以假設一切順利, 但是當我嘗試使用讀取流數據時
file_get_contents('php://stdin');
我得到一個空字符串。 我也嘗試過使用
file_get_contents('php://input');
這給了我一個空字符串的相同結果。
任何幫助,建議或指示將不勝感激。
注意:我正在使用
默認情況下,Apache HTTPD拒絕PUT請求。 您可以簽出mod_put:
http://perso.ec-lyon.fr/lyonel.vincent/apache/mod_put.html
並將其添加到httpd.conf中:
<Location /upload/dir> EnablePut On AuthType Basic AuthName "Web publishing" AuthUserFile /www/etc/passwd AuthGroupFile /www/etc/group <Limit PUT> require valid-user </Limit> </Location>
我最好的猜測是您需要更改httpd.conf才能不拒絕PUT請求。 你檢查了嗎?
您作為第二個參數獲得的r
不正確。 file_get_contents
不使用fopen
使用的a/r/w/a+/r+/w+
參數。 您可能要刪除它,然后執行以下操作:
file_get_contents('php://input');
file_get_contents
不使用“ r”參數-請參見PHP手冊頁 :
string file_get_contents ( string $filename [, int $flags...)
有效的$flag
值為FILE_USE_INCLUDE_PATH, FILE_TEXT, FILE_BINARY
。
嘗試刪除“ r”標志,然后重試
編輯 -問題已更新,“ r”標志已被忽略,因此顯然不是問題的根源。
似乎PHP中有一個關於file_get_contents
返回HTTP POST空字符串的錯誤 。 從錯誤描述:
當使用enctype =“ multipart / form-data”
file, fopen+fread
表單時file, fopen+fread
file_get_contents('php://input')
(以及file, fopen+fread
)不返回POST數據。當提交未指定enctype的相同表單時(因此使用默認的“ application / x-www-form-urlencoded”),一切正常。
因此,似乎一種解決方法是將指定的表單enctype更改為multipart/form-data
,這顯然不適合圖像上傳-從W3 FORM規范開始 :
內容類型“ application / x-www-form-urlencoded”對於發送大量二進制數據或包含非ASCII字符的文本效率不高。 內容類型“ multipart / form-data”應用於提交包含文件,非ASCII數據和二進制數據的表單。
進一步編輯
您的PHP版本似乎已解決此錯誤。 您是否檢查過以確保讀取的緩沖區不是以回車/換行符開頭? 在Sitepoint上討論了一個與您有些類似的問題。
嘗試在輸入上運行strlen
,看看長度是多少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.