PHP下载一些空文件和一些正常

时间:2016-08-31 23:01:12

标签: php

我有这段代码从服务器下载Zip文件:

<?php
$path_parts = pathinfo($_GET['a']);
$file_name  = $path_parts['basename'];
$file_path  = 'temp/' . $file_name;

if (file_exists($file_path)) {
    $size = filesize($file_path);

    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$file_name");
    header('Expires: 0');
    header("Content-Type: application/zip");
    header("Content-length: $size");
    header("Content-Transfer-Encoding: binary");

    // read the file from disk
    readfile($file_path);
}

else
    echo 'File does not exists';
?>

这些文件存储在/temp文件夹中,好奇的是,如果我下载TXT文件,它会下载OK,但如果文件是ZIP文件,那么它下载一个空文件。即使我将ZIP文件的扩展名更改为TXT,它仍然会下载为空,但任何其他文件下载都没问题。可能导致这种行为的原因是什么?

实际上,它会下载文件夹中的ZIP个文件以外的任何其他文件。

3 个答案:

答案 0 :(得分:0)

可能是文件大小,而不是扩展名。查看php.ini文件,查看这些值的设置。如果您的文件大于这些,这可以解释它。

post_max_size=5M
upload_max_filesize=5M

答案 1 :(得分:0)

问题是PHP没有读取生成它们的Java App生成的ZIP文件。但是,正在读取任何其他ZIP文件。

当我使用Java创建ZIP文件时,我不得不用这里发布的方法替换方法(https://www.mkyong.com/java/how-to-compress-files-in-zip-format/)。它现在正常工作。

答案 2 :(得分:-1)

尝试使用

header("Content-type: application/octet-stream");

而不是

header("Content-Type: application/zip");