2010-07-18 66 views
1

我有一个php脚本,我用了多年来强制从我的网站下载。但有时在上个月左右,它停止工作,并触发文件未找到错误。奇怪的是,在Firefox中,如果我在错误页面上查看源代码,那是我正在尝试下载的文件。并从文件>保存从那里给你正确的文件。所以我知道这不是脚本在服务器上找不到文件的问题。强制下载停止工作

我是如何设置标题的?

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header('Content-Type: application/octet-stream'); 
header('Content-Transfer-Encoding: Binary'); 
header('Content-length: '.filesize($file_url)); 
header('Content-disposition: attachment; filename="'.basename($file_url).'"'); 
readfile($file_url); 
+0

'$ file_url'的值是多少? – Artefacto 2010-07-18 13:29:35

+0

这是要下载的文件的路径。我发布的只是用于触发下载的代码。我知道第一个想法是路径是错误的,但它不是查看源并保存生成正确的文件。 – unholysampler 2010-07-18 13:44:50

回答

0

我结束了作弊的工作。

header("Location: $file_url"); //file_url is now the real url, not the path 

然后使用的cPanel,以确保我所用的所有MIME类型分别设置为application/octet-stream

1

你可以试试这个功能吗?

function force_download($file){ 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    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); 
    exit; 
} 
+0

对不起,相同的结果。 – unholysampler 2010-07-18 14:28:34

+1

有点偏离主题,当每个人想要提供文件时添加post-check = 0和pre-check = 0会怎样?这是其中一件事情,它不会真正做任何事情,只是复制粘贴... https://blogs.msdn.com/b/ie/archive/2006/06/01/613132.aspx – kander 2010-07-18 15:31:45

+0

@unholysampler - 你是否使用chrome浏览器,因为我在chrome中看到了相同的错误。它无法呈现标题。 – Shubham 2010-07-19 07:05:20