Скачать заголовок для zip-архива


Я настоящий новичок в php, и у меня есть этот код, который должен позволить создать архив, содержащий файлы в папке, в которой находится файл php, дать архиву имя папки, сохранить его в другой папке и загрузить его.

$zipname = getcwd();
$zipname = $zipname.'.zip';
$zip = new ZipArchive;
$zip->open('D:/mypath/zip/'.basename($zipname).'', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
      while (false !== ($entry = readdir($dir_handle))) {
    if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
        $zip->addFile($entry);
    }
  }
  closedir($dir_handle);
}
else {
die('file not found');
}

$zip->close();

Пока все хорошо: созданный почтовый индекс имеет правильное имя ("foldername.zip ") и находится именно там, где я хочу, в папке /zip/ в корневом каталоге сервера. Теперь я застрял с этими заголовками и не могу указать загрузку в правильное расположение и имя файла

header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header("Location: /zip/$zipname");
?>

Изменение последнего заголовка на

header("Location: /zip/foldername.zip");

Получилось, но я ищу решение, которое не заставляло бы меня редактировать php каждый раз, когда я создаю новую папку.

РЕДАКТИРОВАТЬ: Вот рабочий код

<?php
$zipname = getcwd();
$zipname = substr($zipname,strrpos($zipname,'\\')+1);
$zipname = $zipname.'.zip';
$zip = new ZipArchive;
$zip->open('D:/inetpub/webs/mydomaincom/zip/'.basename($zipname).'', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
      while (false !== ($entry = readdir($dir_handle))) {
    if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
        $zip->addFile($entry);
    }
  }
  closedir($dir_handle);
}
else {
die('file not found');
}

$zip->close();

header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header('Location: /zip/'.$zipname);
?>
Author: brunogermain, 2015-10-30

2 answers

Ваш последний заголовок неверен:

header("Location: /zip/$zipname");

Это должно быть:

header("Location: /zip/".$zipname);

Поскольку ваше $zipname является переменной, а не строкой

 1
Author: Nirnae, 2015-10-30 12:04:51

Попробуйте

header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header('Location: /zip/'.$zipname);
 1
Author: Salah Al-Nawah, 2015-10-30 12:09:19