次のコードを使用して、250mb のような大きなファイルをダウンロードします。
if(file_exists($leadon))
{
set_time_limit(0);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$file_name);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($leadon));
header('Content-Description: File Transfer');
ob_clean();
flush();
readfile($leadon);
exit;
}
die();
ただし、ファイルはインターネットの速度に応じて 18 MB から 75 MB のように部分的にダウンロードされます。サーバー管理者から、私は 500 エラー コード (内部エラー) をトリガーしているとのことで、サーバー セキュリティは攻撃を受けていると見なし、私の IP をブロックします。
それを一時ディレクトリにコピーし、ユーザーがヘッダー (リダイレクト) でダウンロードできるようにし、24 時間以上経過したファイルを削除すると、ページがリロードされ、他のファイルのダウンロードが要求されます。以下にコードを示します。より良い解決策があれば教えてください。
if(file_exists($leadon))
{
$temp_folder = time();
$olderTime = $temp_folder-(24*60*60);
$temp_dir = $tempdir.$temp_folder;
create_dir($temp_dir, 0775);
$dirs = glob($tempdir.'*'); // get all file names
foreach($dirs as $dir)
{ // iterate files
if(is_dir($dir))
{
$temp_dir_name = explode('/',$dir);
$dir_name = $temp_dir_name['1'];
if(intval($dir_name) < intval($olderTime))
{
deleteDir($dir);
}
}
}
set_time_limit(0); //Set the execution time to infinite.
$file_name = str_replace(' ', '_', basename($leadon));
//
$temp_file = $temp_dir."/".$file_name;
copy($leadon, $temp_file);
header('Location: '.$doman_name.'/'.$temp_file);
exit();
}