0

私はどこにも解決策を見つけることができませんでした。

次のようなFlashPlayer用のmp4ファイルを出力するファイルがあります。

^^^/stream/NtPXRMmGjJd47423

そして、私はこの/streamのコードを次のように持っています:

^^^
$file = str_replace('/','\\',DOC_ROOT_STREAM."/".$path);

header('Last-Modified: Thu, 23 Sep 2010 02:00:02 GMT');
header('Content-Length: ' . filesize($file));
header('Connection: close');
header('Content-Type: video/mp4');

readfile($file);
exit;

これは小さなファイルでは機能しますが、大きなファイルでは機能しません。

確認したところ、URLは正しいです。

変更memory limitしてみtime limitましたが、効果がありません。

PSxsendfileなどのApacheモジュールは使用できません。

readfile()ファイルのメモリへのロードを開始せず、フラッシュに送信してもう一度読み取り、ストリーミングを開始しないようにするための解決策が必要です。

4

2 に答える 2

3

これを試して:

$handle = fopen($file, "rb");
while (!feof($handle)) {
  echo fread($handle, 32 * 1024);
}
fclose($handle);

readfile()ファイルの内容全体をメモリにロードしようとします。代わりに、一度に小さなチャンクを読み取ることができますfread()

于 2013-01-16T20:17:07.883 に答える
0

大きなファイルが PHP によって提供される場合に問題が発生する可能性があるもう 1 つのことは、ブラウザーがファイルの一部のみをダウンロードし、後でもう一度ダウンロードする傾向があることです。https://stackoverflow.com/a/4451376/1951649を見てください-これにより、phpアプリケーションがこれらのリクエストを処理できるようになります

于 2013-01-16T20:27:15.023 に答える