質問

すべて、

作成中のアプリケーションの一部として、着信イメージデータを受け入れるHTTP PUT Webサービスが必要です。これは、分析、検証、ローカルファイルストアへの追加が行われます。

サイズ検証後に問題が発生します

  

$ _ SERVER ['CONTENT_LENGTH']

には>があります値が0であり、この値はテストファイルのサイズと同じであるため、この時点まではすべて順調に進んでいると想定できますが、

を使用して着信ストリームデータを読み取ろうとすると
  

file_get_contents( 'php:// stdin');

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

  

file_get_contents( 'php:// input');

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

ヘルプ、提案、または方向性を歓迎します。

NB:使用しています

  • PHP 5.2.6
  • Apache 2.0
役に立ちましたか?

解決

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

他のヒント

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>

file_get_contents は&quot; r&quot;を取りませんパラメーター- PHPマニュアルページを参照してください:

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

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

&quot; r&quot;を削除してみてくださいフラグを立てて再試行

編集-質問が更新され、&quot; r&quot;フラグは無視されていたので、明らかに問題の根本ではありません。

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

  

file_get_contents( 'php:// input')(および file、fopen + fread )も   フォームを送信したときにPOSTデータを返す   enctype =&quot; multipart / form-data&quot;。

     

enctypeを指定せずに同じフォームを送信したとき(デフォルト   &quot; application / x-www-form-urlencoded&quot;使用されます)すべて正常に動作します。

回避策は、指定されたフォームenctypeを multipart / form-data から変更することであるように見えます。これは明らかに、画像のアップロードには理想的ではありません。 "http://www.w3.org/TR/html401/interact/forms.html" rel = "nofollow noreferrer"> W3 FORM仕様:

  

コンテンツタイプ&quot; application / x-www-form-urlencoded&quot;大量のバイナリデータまたは非ASCII文字を含むテキストを送信するには非効率的です。コンテンツタイプ&quot; multipart / form-data&quot;ファイル、非ASCIIデータ、バイナリデータを含むフォームの送信に使用する必要があります。

さらに編集

このバグは、お使いのPHPバージョンで解決されているようです。読み込まれているバッファが復帰/改行文字で始まっていないことを確認しましたか? Sitepoint で議論された、あなたといくらか似た問題があります。

入力で strlen を実行して、長さを確認します。

2番目の引数として取得した r は正しくありません。 file_get_contents は、 fopen が使用する a / r / w / a + / r + / w + 引数を使用しません。あなたはおそらくそれを削除したいだけです:

file_get_contents('php://input');

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top