簡體   English   中英

無法訪問Web服務代碼中的HTTP PUT數據

[英]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');

這給了我一個空字符串的相同結果。

任何幫助,建議或指示將不勝感激。

注意:我正在使用

  • PHP 5.2.6
  • 阿帕奇2.0

默認情況下,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');

參見http://us3.php.net/file_get_contents

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM