【问题标题】:Php download of *.zip or *.rar file are corrupted*.zip 或 *.rar 文件的 PHP 下载已损坏
【发布时间】:2020-05-29 08:49:59
【问题描述】:

我正在尝试下载受保护的 zip、rar 文件。在尝试了数百种不同的标题和组合之后,我迷路了。我无法下载图片、pdf,但 zip 和 rar 已损坏。

问题出在哪里?

代码

$url = url_for('/staff/photos/error.php');
$error = $url;

//$filepath = 'C:\wamp\www\photo_gallery\public\files\3d_models';
$url2 = PROJECT_PATH.DS.'public'.DS.'files'.DS.'3d_models';
$filepath = $url2;

$filename = null;

if (isset($_GET['file']) && basename($_GET['file']) == $_GET['file']) {
    $filename = $_GET['file'];
} else {
    header("Location: $error");
    exit;
}

if ($filename) {

    $abs_path = $filepath . DIRECTORY_SEPARATOR . $filename;
    if (file_exists($abs_path) && is_readable($abs_path)) {
        header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
        header("Content-Type: application/zip");
        header("Content-Type: application/rar");
        header("Content-Transfer-Encoding: Binary");
        header('Content-length: ' . filesize($abs_path));
        header('Content-disposition: attachment; filename=' . $filename);
        readfile($abs_path);
    } else {
        header("Location: $error");
    }
}

【问题讨论】:

  • header("Content-Type: application/zip"); header("Content-Type: application/rar"); ...您不能同时发送 both 这些标头。根据文件类型选择一个。不确定这是否是您的全部问题,但不太可能有帮助。
  • @ADyson 我把(application/rar) rar去掉了,还是一样
  • 好吧,这是一个开始。完整性检查:您是否验证了相关文件一开始就绝对有效?也就是说,您可以直接从原始位置成功打开它们而不涉及您的 PHP 脚本吗?
  • 第二次健全性检查,您是否确认$abs_path 指向服务器磁盘上的有效位置,并且网络服务器的帐户有权读取该位置?

标签: php http download zip


【解决方案1】:

已解决 我补充说:

ob_start();

if ($filename) {
$abs_path = $filepath . DS . $filename;
if (file_exists($abs_path) && is_readable($abs_path)) {

        header('Content-type: application/octet-stream');
        header('Content-length: ' . filesize($abs_path));
        header('Content-disposition: attachment; filename=' . $filename);
        header('Content-transfer-encoding: binary');  

        while (ob_get_level()) {
        ob_end_clean();
        }
        readfile($abs_path);     

    } else {
        header("Location: $error");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多