我使用以下代码下载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();
但根据互联网的速度,文件被部分下载,如18mb到75mb。服务器管理员告诉我,我触发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();
}
答案 0 :(得分:0)
为什么要使用PHP将文件编写为输出?如何将文件保存在Web服务器目录中的某个位置并将用户重定向到相同的位置?让你的web服务器完成服务文件的任务不是吗?