PHP - 强制下载导致404文件未找到错误

时间:2017-09-22 15:52:22

标签: php apache

我正在尝试为我的网站制作一个php强制下载脚本来获取zip文件。我知道文件路径是正确的,脚本生成的链接会返回到文件本身,但是使用脚本找不到文件,如果没有错误检查,它会下载一个损坏的文件。我的代码如下。

<?php

session_start();

    $file='http://www.myurlgoeshere/'.$_SESSION['FilePath'];

    if (headers_sent()) {
        echo 'HTTP header already sent';
    } else {
        if (!is_file($file)) {
            header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
            echo 'File not found - '.$file;
        } else if (!is_readable($file)) {
            header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
            echo 'File not readable';
        } else {
            header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
            header("Content-Type: application/zip");
            header("Content-Transfer-Encoding: Binary");
            header("Content-Length: ".filesize($file));
            header("Content-Disposition: attachment; filename=\"".basename($file)."\"");
            readfile($file);
            exit;
        }
    }
?>

虽然来自$ file的链接echod可以直接使用,但我找不到404。

我做错了什么或是服务器端问题吗?

干杯,

迪伦

1 个答案:

答案 0 :(得分:2)

目前您文件的路径是:

$file='http://www.myurlgoeshere/'.$_SESSION['FilePath'];

实际上它应该是服务器上文件的路径。例如:

$file='/var/www/html/domain.com/public_html/downloads/file_to_download.zip';