質問: phpで作成したサイトで、ダウンロードさせる仕組みを実装しようとしています。 少し大きめ(1MB-20MB程度を想定)のファイルであるため、fread か passthru + cat を考えております。その際、使用用途別の選択基準のようなものはあったりするのでしょうか? これからテストを開始するため、まだ使用感等の確認ができてないのですが、それぞれのメリット・デメリットをご教示いただけると助かります。
回答: ファイルをそのまま加工せずに出力するのなら、phpだとreadfileかfpassthruがおすすめです。passthru+catだとコマンド起動とプロセス間通信のオーバーヘッドがあるし、freadは読んでは書きを自分で記述する必要があるのとデータをいったんphpの文字列に格納する処理が余計に必要になります。 また、apache2にmod_xsendfileというモジュールを追加するとx-sendfileというヘッダでファイルを指定してapache側にファイル送信処理を任せる仕組みが使えるようになります。追加のインストールが必要で面倒ではありますが、性能を追求するなら検討してみてください。