Архив открывается корректно только при сохранении на диск

Sumburus

Guest
Архив открывается корректно только при сохранении на диск

Здравствуйте,

Была задача автоматически архивировать прайс-лист, загружаемый на сайт, а потом рассылать его по почте.

Сделал это следующим образом:
$fp=fopen($price_file.'.xls', "rb");
$zp = gzopen($price_file.'.xls.zip', "w9");
if (($fp) && ($zp)) {
$fs = filesize($price_file.'.xls');
$data = fread($fp,$fs);
gzwrite($zp, $data);
gzclose($zp);
fclose($fp);
}

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

Если напрямую дать ссылку на прайс на сайте и сказать октрыть, то то, что внутри прочитать нормально не получится. Будет файл price.xls[1]. Но если этот файл (price.xls.zip) сначала скопировать, скажем, на рабочий стол и потом открыть, то файл внутри нормально открывается.
То же происходит, когда прайс в архиве приходит по почте. Если сохранить на диск - всё ок, а так, например, в The Bat название типа 1ADECDB. Соответственно человек нормально прочитать не может.

Подскажите, пожалуйста, с чем это связано и как можно поправить?
 

kruglov

Новичок
А как выглядит URL этого прайса?
Если выглядит плохо (path не оканчивается на .zip), то есть ли заголовок Content-Disposition: attachment; filename=price.zip?
 

Sumburus

Guest
Ссылки такого вида:
http://www.site.ru/price/price.xls (Прямо на прайс)
http://www.site.ru/price/price.xls.zip (На архив прайса)
 

RushHourRider

Новичок
Это баг IE 6.х - если нажать open при скачке файла, в имени которого более одной точки, то IE его теряет и выдает ошибку "файл не найден", "не могу открыть" и т.п.

Попробуй делать файл 'price.zip'
 

Sumburus

Guest
price.zip сделать не получится, так как нужно, чтобы внутри был price.xls. На сколько я понял, через gzwrite можно сделать только таким образом.

При открытии из The Bat ведь тоже возникает такая ситуация.
 

440hz

php.ru
Re: Архив открывается корректно только при сохранении на диск

Автор оригинала: Sumburus
Была задача автоматически архивировать прайс-лист, загружаемый на сайт, а потом рассылать его по почте.

Подскажите, пожалуйста, с чем это связано и как можно поправить?
элементарно какой-нить умный админ режет почтовые вложения, к примеру.

а уж price.zip - стандартное вложение серии вирусов Win32.HLLM.Beagle.*

ну это я так ... мысли в слух

ты попроси клиентов переслать тебе то письмо и руками посмотри что же пришло.
 

Sumburus

Guest
Я тестировал на себе. Ведь если вложение сохранить на диск, то потом всё открывается нормально. Получается, что ничто не режет.
 

Sumburus

Guest
Если я правильно понял, то zip'ом можно только читать, а для того чтобы писать рекомендуют брать класс из PhpMyAdmin.
Или как-то можно?

А у кого-нибудь такая же задачка (архивирование прайса) по нормальному работает?
 

Хам

Новичок
Автор оригинала: Sumburus
Я тестировал на себе. Ведь если вложение сохранить на диск, то потом всё открывается нормально. Получается, что ничто не режет.
у меня такое очучение, что ты просто забыл добавить: Header("Content-Encoding: gzip");

-~{}~ 20.09.05 15:14:

а если пойти http://ru.php.net/zip методом..
то тут нужно поменять алгоритм... закачивать на сайт зип, а там его скрипт разворачивает и усе впорядке...
тут ты убьешь двух зайцев... исходящий трафик при закачке zip-а уменьшится... и проблема с длинным именем уйдет...
 
Сверху