私はユーザーにファイルをダウンロードさせるPHPスクリプトを書いています。 1つの例外を除いてすべてうまくいく、ファイルが完全にダウンロードされていない 10 MBのmp3ファイルがダウンロードされているとしますが、5 MB後に停止し、ダウンロードが完了したと表示します。PHPで強制ダウンロードに関する問題
私のサイトのホストがgodaddy.com
され、コードが
<?php
if(ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}
if (isset ($_REQUEST['file_name'])) {
$filename = basename($_REQUEST['file_name']);
$filesize = filesize("mp3gallery/".$_REQUEST['file_name']);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-length: $filesize");
header("Content-Transfer-Encoding: binary");
header('Content-type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3');
header('Content-Disposition: attachment; filename="'.$filename.'"');
$read_file = "mp3gallery/".$_REQUEST['file_name'];
function readfile_chunked($filename,$retbytes=true) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$cnt =0;
// $handle = fopen($filename, 'rb');
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
if ($retbytes) {
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status) {
return $cnt; // return num. bytes delivered like readfile() does.
}
return $status;
}
readfile_chunked($read_file,true);
}
?>
を下回っている問題は、スクリプトがタイムアウトすることはおそらくです.........
あなたはOPはこれを試してみてください、私たちを追加したい場合があります。あなたのコードは何をより良くしますか? – middus