[英]php code to zip and auto download a file. Works in Windows but not in Ubuntu
I've got a project about showing all files of root directory in a list and the user can browse through files-directories, search a file by name,with the button downloadAll he can download all files at the current list.To make the downloadAll button work I use downloadAll.php code which by getting the current directory can create a zip file and auto download it. 我有一个关于在列表中显示根目录的所有文件的项目,用户可以浏览文件目录,按名称搜索文件,并单击按钮downloadAll,他可以下载当前列表中的所有文件。按钮工作我使用downloadAll.php代码,该代码通过获取当前目录可以创建一个zip文件并自动下载。 It works fine in windows.
在Windows中工作正常。 I'm trying to run the same project at linux but in that case it downloads an empty zipped file.
我试图在Linux上运行相同的项目,但在这种情况下,它将下载一个空的压缩文件。 Also when I try to open it this message appears:
另外,当我尝试打开它时,也会显示此消息:
Archive: /tmp/archived_name.zip
[/tmp/archived_name.zip]
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
zipinfo: cannot find zipfile directory in one of /tmp/archived_name.zip or
/tmp/archived_name.zip.zip, and cannot find /tmp/archived_name.zip.ZIP, period.
downloadZip.php: downloadZip.php:
<?php
if ((isset($_GET['currentdirectory'])) && ($_GET['currentdirectory']!="")){
$the_folder = $_GET['currentdirectory'];
}
else {
$the_folder = "/var/www/my_project";
}
$the_folder1 = $the_folder;
$zip_file_name = 'archived_name.zip';
$download_file= true;
class FlxZipArchive extends ZipArchive {
public function addDir($location, $name) {
$this->addEmptyDir(str_replace("./","",$name));
$this->addDirDo($location, str_replace("./","",$name));
}
private function addDirDo($location, $name) {
$name .= '/';
$location .= '/';
$dir = opendir ($location);
while ($file = readdir($dir))
{
if ($file == '.' || $file == '..') continue;
$do = (filetype( $location . $file) == 'dir') ? 'addDir' : 'addFile';
$this->$do($location . $file, str_replace("./","",$name) . $file);
}
}
}
$za = new FlxZipArchive;
$res = $za->open($zip_file_name, ZipArchive::CREATE);
if($res === TRUE)
{
$za->addDir($the_folder1, basename($the_folder1));
$za->close();
}
else { echo 'Could not create a zip archive';}
if ($download_file)
{
ob_get_clean();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=" . basename($zip_file_name) . ";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($zip_file_name));
readfile($zip_file_name);
}
unlink("archived_name.zip");
?>
You likely have an error that is happening elsewhere. 您可能有其他地方发生的错误。 Try setting
$download_file
to false and set error_reporting(E_ALL)
to see if there are any errors. 尝试将
$download_file
设置$download_file
false并设置error_reporting(E_ALL)
以查看是否存在任何错误。 If that doesn't work, try viewing the web server error logs. 如果这不起作用,请尝试查看Web服务器错误日志。 For apache they default to
/var/log/apache2/error.log
. 对于apache,它们默认为
/var/log/apache2/error.log
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.