1

全て、

私が書いているアプリケーションの一部として、着信画像データを受け入れる HTTP PUT Web サービスが必要です。これは、分析、検証、およびローカル ファイル ストアへの追加によって行われます。

私の問題は、サイズの検証後に発生します

$_SERVER['CONTENT_LENGTH']

> 0 の値があり、この値はテスト ファイルのサイズと同じであるため、この時点まではすべて順調に進んでいると想定できます、次を使用して着信ストリーム データを読み込もうとすると、

file_get_contents('php://stdin');

空の文字列を取得します。私も使ってみました

file_get_contents('php://input');

これにより、空の文字列と同じ結果が得られます。

ヘルプ、提案、指示をいただければ幸いです。

注意:私は使用しています

  • PHP 5.2.6
  • アパッチ 2.0
4

4 に答える 4

2

Apache HTTPD はデフォルトで PUT リクエストを拒否します。mod_put をチェックしてみてください:
http://perso.ec-lyon.fr/lyonel.vincent/apache/mod_put.html

これを httpd.conf に追加します。

<場所/アップロード/ディレクトリ>
  有効にする
  AuthType 基本
  AuthName「ウェブパブリッシング」
  AuthUserFile /www/etc/passwd
  AuthGroupFile /www/etc/group
  <リミットPUT>
    有効なユーザーが必要
  </制限>
</場所>
于 2008-10-04T05:34:35.937 に答える
1

私の推測では、PUTリクエストを拒否しないようにhttpd.confを変更する必要があります。確認しましたか?

于 2008-09-30T08:17:04.963 に答える
0

2番目のr引数が正しくないのであなたは持っています。 を使用する引数file_get_contentsは使用しません。あなたはおそらくそれを削除して、ただ実行したいと思うでしょう:a/r/w/a+/r+/w+fopen

file_get_contents('php://input');

http://us3.php.net/file_get_contentsを参照してください。

于 2008-09-28T13:48:15.230 に答える
0

file_get_contents「r」パラメータを取りません-PHPのマニュアルページを参照してください

string file_get_contents  ( string $filename  [, int $flags...)

有効な$flag値はFILE_USE_INCLUDE_PATH, FILE_TEXT, FILE_BINARYです。

「r」フラグを削除して、再試行してください

編集-質問が更新されました。「r」フラグは無視されていたため、明らかに問題の原因ではありませんでした。

HTTP POSTに対して空の文字列を返すことに関して、PHPにバグが報告されているようです。file_get_contentsバグの説明から:

file_get_contents('php://input')(およびfile, fopen+fread)enctype = "multipart / form-data"を使用してフォームを送信した場合、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してみて、長さが何であるかを確認してください。

于 2008-09-28T13:55:21.407 に答える