用PHP写了一个文件下载程序,为了不让用户看到下载链接,于是采用流的方式进行下载传输,选择使用Header进行下载,
但是现在问题是:当我在浏览器中点击下载按钮后,IE弹出保存对话框,这时候我没有立即点击保存,而是等了一会儿,
然后才保存的,这样每次下载就只有几百K了,而实际文件确有10M左右。但是如果当我立即点击保存的话,就会保存很正常。我的环境是linux + apache + php,现在大概找到一点儿问题的所在,即在apache的httpd.conf文件中配置Timeout为15,
如果把他设置长一点儿时间,就会好些了,但是我想问下能不能在PHP程序中通过某个函数或什么设置来达到目的,
因为现在我没用修改apache配置的权限....

解决方案 »

  1.   

      设置 PHP 执行时间为
    set_time_limit(0);
     
      

  2.   


    谢谢你的回复,可是不行啊,这个我设置过了,不行,这个是我的程序:<?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);
    }?>
      

  3.   

    点击下载时打开一个新的页面,在另一个页面里写,用post传值的方式,这样就不用分流,用户也看不到链接了
      

  4.   

    不明白,麻烦能说的再明白点儿吗?什么post传值的方式?
    我现在是在confirm_download.php页面中有个“confirm”按钮,当用户点了这个按钮后,就会提交到
    download.php文件(这个文件全是php代码),然后在download.php中就会有个文件路径变量,然后
    再调用我上面写的download()函数实习的下载。在Firefox、Safari下都正常,因为这两个浏览器当弹出保存对话框时,其实后台已经在下载了,
    而IE不是,它只有等用户选择好保存位置后才开始下载,这样就有可能会造成用户要是选择保存文件的
    位置花的时间过长的话,会导致timeout(应该就是apache中的Timeout配置),最终导致其下载文件
    失败,只下载几百K。
      

  5.   

    难道就没有人遇到这个问题么? 很多邮箱在通过IE下载附件的时候,都会出现这种情况,比如网易163
    邮箱,当点击“下载附件”出现保存对话框时,等40秒后再保存,这时就会只下载到 几十K到几百K ,
    根本下载不到原本几M大小的附件。  问题是我的只等10多秒就这样,只要用户稍微查找文件存放位置花
    点儿时间就会超过10多秒。