私はしばらくの間 Web アプリを作成しており、画像の提供に関していくつかの問題に遭遇しています。
私のコードは、 を使用してサーバーからファイル データを取得し、file_get_contents
Slim のRequest
オブジェクトのwrite
メソッドを使用してファイルの内容を出力し、ヘッダーを設定します。ほとんどのファイルでこれは機能しますが、大きな画像では画像の寸法のグレーのアウトラインしか表示されないことがよくあります (モバイルおよびデスクトップの Chrome でテスト済み)。でリクエストエラーが発生したERR_SPDY_PROTOCOL_ERROR
ため、HTTP 2の問題であると思いました(テストしたサーバーは、nginx構成のディレクティブで設定されたHTTP 2接続をリッスンしますlisten [port] http2
)が、応答で使用されるHTTPバージョンをダウングレードしようとしましたPSR-7のRequestInterface
やり方withProtocolVersion
で何も変わらなかった。
上記のコンテンツを使用してfile_get_contents
出力することは、物事を行うための非常に回りくどい方法であることは知っていますが、このアプリのユーザーがアップロードされたファイルの場所を任意に設定できるようにする唯一の方法です。
$filepath
これは、ユーザーが要求したファイルへのパスである私のコードの最も関連性の高い部分です。このコードは、大きな画像を除くすべてのファイルで期待どおりに機能します。
return $response->withHeader('Content-Type', mime_content_type($filepath))->write(file_get_contents($filepath));