PHP - 强制下载文件无效

时间:2016-01-15 08:57:04

标签: php

code.php

$code = $_GET["code"];
$file = 'code/'.$code.'.html';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}

生成的下载文件的网址:

http://www.example.com/code.php?code=yoursite.com_nbsp63ibrf

好吧,我想强制下载html文件,上面的代码无效,只是在浏览器上预览文件!

5 个答案:

答案 0 :(得分:1)

file_exists()返回false。使用文档根目录更改路径:

$code = $_GET["code"];
$file = $_SERVER['DOCUMENT_ROOT'] . '/code/' . $code . '.html'; // set your path from document root.
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}

答案 1 :(得分:0)

实际上这是不可能的。 如果文件应该下载,浏览器可以自己决定。

你可以去的最远的是发送内容处置标题。

答案 2 :(得分:0)

尝试更改内容类型以匹配文件类型并将传输编码设置为二进制文件:

header('Content-Transfer-Encoding: binary');
header('Content-Type: text/html');

答案 3 :(得分:0)

试试这个

  all_born.push('ALL');
  all_name.push('ALL');

答案 4 :(得分:0)

不幸的是,这是一个编码问题。我将code.php编码从UTF-8更改为UTF-8而没有BOM,然后问题解决了。感谢所有的答案和帮助。我忘了PHP标头仅适用于没有BOM的UTF-8。