Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не могу заставить скрипт возвращать браузеру корректный файл для загрузки
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Не могу заставить скрипт возвращать браузеру корректный файл для загрузки

Страниц (1): [1]
 

1. spartan - 27 Апреля, 2012 - 09:10:44 - перейти к сообщению
Добрый день!

Прошу помощи/совета. У меня стоит стандартная задача: по нажатию кнопки на странице скрипт должен позволять скачивать автоматически генерируемый файл (xml-документ, упакованный в zip-архив). Вроде все тривиально: по нажатию формирую файл, отправляю заголовки, вывожу содержимое файла в ответ таким вот кодом:

PHP:
скопировать код в буфер обмена
  1.  
  2. $filePath = "/www/vhosts/mysite.ru/html/tmp/myfile.zip";
  3. $fileName = "myfile.zip"
  4. header("HTTP/1.1 200 OK");
  5. header("Content-Disposition: attachment; filename=\"".$fileName."\"");
  6. header("Content-Length: ".filesize($filePath));
  7. header("Content-type: application/octet-stream");
  8. print file_get_contents($filePath);
  9.  


Код отрабатывает, xml-документ формируется правильный, файл упаковывается и отправляется, я его сохраняю, но он оказывается "битый". Сначала я полагал, что проблема в неправильной архивации, попробовал отправлять xml-файл (с заменой значения Content-type, соответственно) в неупакованном виде - та же проблема. Файл почему-то отправляется не целиком (сгенерированный на сервере он имеет размер 27кБ, полученный в браузере 24кБ) и в начале файла добавляется "/www/vhosts/mysite.ru/html/tmp/".

Уже все перепробовал: и Content-type менять, и Content-Length убирать и функцию вывода содержимого файла другую использовать (например, fpassthru или fopen($fn, "rb")+fread) и, как уже говорил, вместо zip'а сам xml отправлять - поведение не меняется. И zip, и xml присылаются "испорченные".

Понимаю, что проблема примитивна, где-то что-то делаю не так, но поиск по Инету выдает везде практически одинаковые примеры. В чем загвоздка, не соображу.

UPD:
spartan пишет:
Файл почему-то отправляется не целиком (сгенерированный на сервере он имеет размер 27кБ, полученный в браузере 24кБ) и в начале файла добавляется "/www/vhosts/mysite.ru/html/tmp/"


С первой проблемой разобрался сам... забыл flush сделать после генерации xml-документа. Осталось понять, почему в начало тела http-ответа добавляется путь к папке, где лежит файл.

UPD:
Со второй вроде тоже разобрался. Конструкция перед print'ом

решила проблему.

 

Powered by ExBB FM 1.0 RC1