Скачивайте файлы в виде вложений с архивом .zip

У меня есть эта функция в моем классе имя MyMethods:

function zipDownload($file_names,$file_path){
$zip_file_name = date('Y-m-d-h-i-s').'_attachement.zip';
$zip = new ZipArchive();
if($zip->open($zip_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
echo("cannot open <".$zip_file_name.">\n");
}
else{
$filePathAry = explode("/",$file_path);
$count = count($filePathAry);
$path = '';
for($i=0; $i<=$count - 2; $i++){
$path .= $filePathAry[$i].'/';
}
$path = $this->baseDir().$path;
foreach($file_names as $files){
$zip->addFile($path,$files);
}
$zip->close();
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$zip_file_name);
header("Pragma: no-cache");
header("Expires: 0");
readfile($zip_file_name);
exit;
}
}

Я называю это следующим кодом из уровня представления:

//filled array with names of files:
loop over files name{
$filesAry[] = $fileName;
}
$method->zipDownload($filesAry,$zipPath);

при отладке я получаю эту ссылку как отдельный путь к файлу:

 Path : http://localhost/sites/mySite/bdc/uploader/exhibitsFiles/06_08_2014
File Name: xyb.jpg

после нажатия кнопки «загрузить все файлы как вложение», он создает файл .zip, но не открывается как обычный файл .zip?

Что мне не хватает? пожалуйста, помогите мне в этом. Благодарю.

0

Решение

Используйте путь к файловой системе, а не http-адрес в $zip->addFile() и убедитесь, что добавляемый вами файл существует и доступен для чтения.

Если вам нужно получить файл для добавления в архив через http, используйте что-то вроде:

$zip->addFromString($files, file_get_contents($path));

на месте:

$zip->addFile($path,$files);
1

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

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