用PHP写了一个文件下载程序,为了不让用户看到下载链接,于是采用流的方式进行下载传输,选择使用Header进行下载,
但是现在问题是:当我在浏览器中点击下载按钮后,IE弹出保存对话框,这时候我没有立即点击保存,而是等了一会儿,
然后才保存的,这样每次下载就只有几百K了,而实际文件确有10M左右。但是如果当我立即点击保存的话,就会保存很正常。我的环境是linux + apache + php,现在大概找到一点儿问题的所在,即在apache的httpd.conf文件中配置Timeout为15,
如果把他设置长一点儿时间,就会好些了,但是我想问下能不能在PHP程序中通过某个函数或什么设置来达到目的,
因为现在我没用修改apache配置的权限....
但是现在问题是:当我在浏览器中点击下载按钮后,IE弹出保存对话框,这时候我没有立即点击保存,而是等了一会儿,
然后才保存的,这样每次下载就只有几百K了,而实际文件确有10M左右。但是如果当我立即点击保存的话,就会保存很正常。我的环境是linux + apache + php,现在大概找到一点儿问题的所在,即在apache的httpd.conf文件中配置Timeout为15,
如果把他设置长一点儿时间,就会好些了,但是我想问下能不能在PHP程序中通过某个函数或什么设置来达到目的,
因为现在我没用修改apache配置的权限....
set_time_limit(0);
谢谢你的回复,可是不行啊,这个我设置过了,不行,这个是我的程序:<?phpset_time_limit(0);function downfile($file,$mime_type){
@ob_end_clean();
header('Content-Type: ' . $mime_type);
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename='.basename($file));
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($file));
readfile($file);
}?>
我现在是在confirm_download.php页面中有个“confirm”按钮,当用户点了这个按钮后,就会提交到
download.php文件(这个文件全是php代码),然后在download.php中就会有个文件路径变量,然后
再调用我上面写的download()函数实习的下载。在Firefox、Safari下都正常,因为这两个浏览器当弹出保存对话框时,其实后台已经在下载了,
而IE不是,它只有等用户选择好保存位置后才开始下载,这样就有可能会造成用户要是选择保存文件的
位置花的时间过长的话,会导致timeout(应该就是apache中的Timeout配置),最终导致其下载文件
失败,只下载几百K。
邮箱,当点击“下载附件”出现保存对话框时,等40秒后再保存,这时就会只下载到 几十K到几百K ,
根本下载不到原本几M大小的附件。 问题是我的只等10多秒就这样,只要用户稍微查找文件存放位置花
点儿时间就会超过10多秒。