IE下载文件不全

lihangkong1986 2009-08-04 02:29:07
用PHP写了一个文件下载程序,为了不让用户看到下载链接,于是采用流的方式进行下载传输,选择使用Header进行下载,
但是现在问题是:当我在浏览器中点击下载按钮后,IE弹出保存对话框,这时候我没有立即点击保存,而是等了一会儿,
然后才保存的,这样每次下载就只有几百K了,而实际文件确有10M左右。但是如果当我立即点击保存的话,就会保存很正常。

我的环境是linux + apache + php,现在大概找到一点儿问题的所在,即在apache的httpd.conf文件中配置Timeout为15,
如果把他设置长一点儿时间,就会好些了,但是我想问下能不能在PHP程序中通过某个函数或什么设置来达到目的,
因为现在我没用修改apache配置的权限....
...全文
378 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lihangkong1986 2009-08-05
难道就没有人遇到这个问题么? 很多邮箱在通过IE下载附件的时候,都会出现这种情况,比如网易163
邮箱,当点击“下载附件”出现保存对话框时,等40秒后再保存,这时就会只下载到 几十K到几百K ,
根本下载不到原本几M大小的附件。 问题是我的只等10多秒就这样,只要用户稍微查找文件存放位置花
点儿时间就会超过10多秒。
回复
lihangkong1986 2009-08-04
[Quote=引用 4 楼 blueforyou 的回复:]
点击下载时打开一个新的页面,在另一个页面里写,用post传值的方式,这样就不用分流,用户也看不到链接了
[/Quote]


不明白,麻烦能说的再明白点儿吗?什么post传值的方式?
我现在是在confirm_download.php页面中有个“confirm”按钮,当用户点了这个按钮后,就会提交到
download.php文件(这个文件全是php代码),然后在download.php中就会有个文件路径变量,然后
再调用我上面写的download()函数实习的下载。

在Firefox、Safari下都正常,因为这两个浏览器当弹出保存对话框时,其实后台已经在下载了,
而IE不是,它只有等用户选择好保存位置后才开始下载,这样就有可能会造成用户要是选择保存文件的
位置花的时间过长的话,会导致timeout(应该就是apache中的Timeout配置),最终导致其下载文件
失败,只下载几百K。
回复
blueforyou 2009-08-04
点击下载时打开一个新的页面,在另一个页面里写,用post传值的方式,这样就不用分流,用户也看不到链接了
回复
lihangkong1986 2009-08-04
[Quote=引用 2 楼 fxs_2008 的回复:]
设置 PHP 执行时间为
set_time_limit(0);

[/Quote]

谢谢你的回复,可是不行啊,这个我设置过了,不行,这个是我的程序:

<?php

set_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);
}

?>
回复
fxs_2008 2009-08-04
设置 PHP 执行时间为
set_time_limit(0);
回复
lihangkong1986 2009-08-04
自己顶一下...
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告