5

いろいろ調べてみると、PHP スクリプトからブラウザーベースのクライアントにダウンロード可能な大きなファイルを提供する方法として、X-Sendfile を推奨している人が多いようです。

私が調べているいくつかの方法は次のとおりです。

  • ストリーミング fopen
  • ストリーミング cURL
  • file_get_contents
  • カール
  • X-Sendfile

これらのうち、ほとんどの人が X-Sendfile が最高だと言っています。

問題は、大きなファイルを処理できるだけでなく、ほとんどのサーバーで広く普遍的なダウンロード方法を実装しようとしていることです。これは、私が書いているスクリプトが自分のサーバーだけでなく他の多くのサーバーでも使用されるためです。

私の質問は、X-Sendfile がこれほど優れている理由は何ですか? それがとても良いのに、なぜ私はそれについてあまり耳にしないのか、なぜもっと頻繁に使用されないのか? 最後に、一般的な低予算の共有 Web ホストのほとんどは X-Sendfile をサポートしますか?

ありがとう!

4

1 に答える 1

3

これにより、ウェブサーバーは、そのファイルをクライアントに送信するのに最適な方法であると判断した方法でファイルを送信できます。また、Web サーバーがコードを 1 行も書かずにサポートしている限り、範囲要求 (つまり、ダウンロード マネージャーと再開) のサポートも有効にします。

ただし、「典型的な低予算の共有 Web ホスト」がサポートする可能性は低いです。ただし、本当にそれらをターゲットにするかどうかを検討してください。これには通常、古い PHP バージョンのサポート、厄介な構成 (safe_mode および/または magic_quotes が有効になっている)、PDO などの PHP モジュールの欠如 (最近の PHP バージョンでは常に有効になっていますが、私の以前のポイントの 1 つを参照してください) も含まれます。

ファイルをクライアントに送信する他の方法には、PHP がファイルを読み取ってから文字列データとして Web サーバーに渡す必要があるという欠点があります (これは、たとえばカーネルがファイル全体をソケットに書き込むようにする場合と比べて効率的ではありません)。それを使用file_get_contentsするとさらに悪いことに、まったく必要のないファイル全体をメモリに読み込むことになります。

于 2012-06-29T14:20:50.953 に答える