我有这段代码从服务器下载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
个文件以外的任何其他文件。
答案 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");