не срабатывает ZipArchive::addFromString

egoriy33

Новичок
Добрый день всем!
Пытаюсь создать архив и слить его в выходной поток
код такой:
Код:
$archive = $_SERVER['DOCUMENT_ROOT'].'/userfiles/user_14/14.zip';
$h = fopen($archive, "w");
fclose($h);

$zip = new ZipArchive();
$zip->open($archive, ZipArchive::CREATE);

if ($zip->open($archive, ZipArchive::CREATE)!==TRUE) {
    exit("Невозможно открыть <$filename>\n");
}else{
    //exit("все ок!");
}


if(file_exists($file_inn)){
    $zip->addFromString('13_11_14.06.2015:12:14:30_inn_8abc.docx', file_get_contents($_SERVER['DOCUMENT_ROOT'].'/userfiles/user_14/13_11_14.06.2015:12:14:30_inn_8abc.docx'));
}
$zip->close();

$ctype="application/zip";

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: ".$ctype);
header("Content-Disposition: attachment; filename=\"".basename($archive)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($archive)); // необходимо доделать подсчет размера файла по абсолютному пути
readfile($archive);
exit();
зип сливается нормально, но при распаковке архива winrar пишет:
Архивы не найдены и
! C:\Users\Алексей\Downloads\14 (6).zip: Архив повреждён или имеет неизвестный формат
что я делаю не так?
плиз хелп!
Спасибо!
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
$zip->open($archive, ZipArchive::CREATE);

if ($zip->open($archive, ZipArchive::CREATE)!==TRUE) {
Это - это, простите, ЧТО? Вас не затруднит перевести этот кусок кода на русский язык?

if(file_exists($file_inn)){
$zip->addFromString('13_11_14.06.2015:12:14:30_inn_8abc.docx', file_get_contents($_SERVER['DOCUMENT_ROOT'].'/userfiles/user_14/13_11_14.06.2015:12:14:30_inn_8abc.docx'));
Вы проверяете наличие $file_inn, а добавляете какой-то левый файл. Не странно ли это?
Причём добавляете не сам файл через специально предназначенный для этого метод ZipArchive::addFile, а прочитанную в память его копию. А если у вас файл будет под гигабайт размером?
И вообще, вы в курсе, что двоеточие является валидным символом имени файла далеко не на всех файловых системах?

Content-Transfer-Encoding - нет такого заголовка в HTTP. Если так хочется что-то эдакое указать - Transfer-Encoding.

Очищеный от глупостей, у меня ваш код на ура работает.
 

egoriy33

Новичок
да - все заработало
но при распаковке скачанного архива winrar пишет:
! C:\Users\Алексей\Downloads\arc_14.zip: Невозможно создать C:\Users\Алексей\Downloads\arc_14\
Системе не удается найти указанный путь.
хотя при этом все распаковывается корректно.
Может кто-нить знает, как убрать это сообщение
 

fixxxer

К.О.
Партнер клуба
Winrar - коммерческий продукт, там есть техподдержка, вот у них и спроси.

Windows explorer умеет распаковывать zip-архивы сам, безо всяких винраров, если чо.
 

AnrDaemon

Продвинутый новичок
да - все заработало
но при распаковке скачанного архива winrar пишет:
! C:\Users\Алексей\Downloads\arc_14.zip: Невозможно создать C:\Users\Алексей\Downloads\arc_14\
Системе не удается найти указанный путь.
хотя при этом все распаковывается корректно.
Может кто-нить знает, как убрать это сообщение
Это сообщение убирается чтением документации и правильной сборкой архива на сервере.
 

AnrDaemon

Продвинутый новичок
Ещё не забывайте глазами смотреть, что у вас в итоговом архиве творится.
Очобенно когда через readfile() что-то отдаёте.
 
Сверху