ダリの雑記:WEBプログラム版

大容量のmp4ファイルをPHPで読み込んで出力する場合

数MBレベルのmp4ファイルならば

[PHP]
header('Content-type: video/mp4');
readfile("mp4ファイルのパス");
exit;
[/PHP]

で十分対応できていたのですが、100MB越えのファイルになった際、「ファイルが壊れているため動画を再生できません。」という表示になってしまいました。

いろいろと調べた結果、readfileがダメとのこと。

記述を

[PHP]
header('Content-type: video/mp4');
$handle = fopen("mp4ファイルのパス", 'rb');
while (!feof($handle))
{
echo fread($handle, 4096);
ob_flush();
flush();
}
fclose($handle);
exit;
[/PHP]

と変更したところ、正常に再生されました。

ちなみにこれ、メモリによるみたいです。
ini_set("memory_limit","256M");
とPHPに記述しメモリ制限を増やしたところ、「readfile」でもうまく行きました(使用したファイルの容量は160MBです。)

でもこれはレンタルサーバによっては効かない場合もあるので、やっぱり後者の記述方法が確実かと思います。
※後者の場合ini_set("memory_limit","8M")でも正常に再生できました。

 

参考サイト

わくわくプログラミング自習室 Blogs Home

モバイルバージョンを終了