apache — php код для архивирования и автоматической загрузки файла. Работает в Windows, но не в Ubuntu

У меня есть проект по отображению всех файлов корневого каталога в списке, и пользователь может просматривать файлы-каталоги, искать файл по имени, с помощью кнопки downloadAll, он может загружать все файлы в текущем списке. Чтобы сделать downloadAll Работа с кнопками Я использую код downloadAll.php, который, получив текущую директорию, может создать zip-файл и автоматически загрузить его. Он отлично работает в Windows. Я пытаюсь запустить тот же проект в Linux, но в этом случае он загружает пустой ZIP-файл. Также, когда я пытаюсь открыть его, появляется это сообщение:

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:

<?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");
?>

0

Решение

Вероятно, у вас есть ошибка, которая происходит в другом месте. Попробуйте установить $download_file ложь и установить error_reporting(E_ALL) чтобы увидеть, есть ли какие-либо ошибки. Если это не сработает, попробуйте просмотреть журналы ошибок веб-сервера. Для Apache они по умолчанию /var/log/apache2/error.log,

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector