直接HTTPリクエスト(ファイルを安全に保つ、ダウンロードを追跡するなど)を許可するのではなく、PHPを効率的に使用してファイルをダウンロードする方法について多くの質問がありました。なぜreadfile()はPHPメモリを使い果たしますか?
答えはほとんど常にPHP readfile()です。
- Downloading large files reliably in PHP
- How to force download of big files without using too much memory?
- Best way to transparently log downloads?
しかし、それは巨大なファイル、それはユーザーの何百ものライブサイト上にあるとき、ダウンロードがハングし始め、PHPでのテスト中に素晴らしい作品が、メモリの限界が使い果たされる。
readfile()
がトラフィックが高いときにメモリが爆発する原因は何ですか?私はそれが出力バッファに直接書き込むことによってPHPメモリの大量使用をバイパスすることになっていると思った?
EDIT:(明確にするために、私は「なぜ」を探しています、「私は何を行うことができない」私はApacheのmod_xsendfileを回避するための最良の方法だと思います。)
(ob_start()経由で)PHP出力バッファリングをしていますか?もしそうなら、PHPはファイルの内容をキャッチしてメモリの問題を引き起こします。 – ceejayoz
リンクされたPHPドキュメントの例を使って、私はob_clean()を持っていません。流す(); readfile($ file); – tmsimont