2014-04-23 34 views
0

我试图通过PHP进行“强制下载”,但我得到的都是奇怪的符号。php头文件不会下载

我尝试添加

我已经得到了标题(“应用/ typeofmyfile”)和标题(“内容处置”)......以及从这里许多其他后很多人,但没有这样的:

$f_location = "path/myfile.nl2pkg"; 
$f_name = "myfile.nl2pkg"; 


header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=".$f_name); //Here also tried basename($f_name) but nothing 
header("Content-Length: ".filesize($f_location));  
header("Content-Transfer-Encoding: binary"); 

我做它喜欢这样,因为当用户点击“下载”按钮,使用Ajax我送他到页面强制下载,把一些数据在数据库中,然后刷新主页面。

这是我第一次处理标题,而且我读了什么,不知道我是否做错了什么。

+1

你的代码应该工作在一个干净的页面..尝试运行你的Ajax,做你必须做的,然后用该代码打开一个新的空白页面,它应该工作。 – rennyrocha

+0

使用header_sent检查天气或不检查您的标题已发送http://de1.php.net/manual/en/function.headers-sent.php –

+0

好吧,为了尝试它,我在浏览器中添加了一个新选项卡,把所有的变量放在标题和下载工作。去做你问我的事,我会告诉你的。还要检查那个页面,谢谢。 – Cheshire

回答

0

你的头文件看起来不错。问题似乎在别的地方。

要调试您的代码,请使用headers_sent来确定是否已经发送了标头。您也可以使用headers_list查看已发送的标头。

if (headers_sent()) { 
    var_dump(headers_list()); 
    die('Headers have already been sent'); 
    exit; 
} 

如果您在定义标题之前使用此权限,您可能会发现问题的根源。

+0

嗨,我已经完成了在发送标题之前,唯一显示我的是“Powered By PhP”标题。正如我所说,第一次在他们身上工作。也尝试做一个header_remove()但没有,所以我决定让它作为renny告诉我,做一个页面的Ajax添加到数据库和另一个重定向后的AJAX到下载。我想在第一页做出来,但是,如果你看到'Powered By PhP'头部,这意味着你的头文件已经发送,那么这个工作在 – Cheshire

+0

那一刻起作用。尝试搜索'?><?php'和类似的问题。看起来你似乎输出了一些东西,即使这只是一些空白。如果你已经输出了一些内容,'header_remove'将不会执行这项工作。 –

+0

谢谢,也许我得到的返回true或false的函数会导致问题? – Cheshire