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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: скрин скачки файла с сервера

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: ошибка при отдаче файла
marty_ny
Отправлено: 18 Февраля, 2014 - 15:06:39
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




Здравствуйте.
Есть скрипт, который должен отдавать файл по запросу.
в теории, все очень банально:
PHP:
скопировать код в буфер обмена
  1.  
  2. $itemName = 'file_name.png';
  3. $fileRoot = '/srv/http/forder/file_name.png';
  4.  
  5. $file = fopen($fileRoot, 'r');
  6. if($file) {
  7. header("Content-type: " . mime_content_type($file));
  8. header("Content-Disposition: attachment; filename=" . rawurlencode($itemName));
  9. while($buffer = fread($file, 65536))
  10. echo $buffer;
  11. fclose($file);
  12. }
  13.  

но файл выходит битый, при чем файлы .txt и .pdf качаются хорошо, а остальные выходят битые.

далее примеры файлов
1-скачан на прямую с сервера
2-скачан скриптом (прикреплю следующим сообщением)
Прикреплено изображение
favicon.png
 
 Top
marty_ny
Отправлено: 18 Февраля, 2014 - 15:08:05
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




здесь файл, слитый при помощи скрипта
Скачать файл: favicon(2).png
Скачан раз: 113
 
 Top
Tyoma5891
Отправлено: 18 Февраля, 2014 - 15:28:12
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




попробуйте в заголовке делать так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. header("Content-Disposition: attachment; filename=\"".$itemName."\"");
  3.  
 
 Top
esterio
Отправлено: 18 Февраля, 2014 - 15:43:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




 
 Top
marty_ny
Отправлено: 19 Февраля, 2014 - 13:32:43
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




Tyoma5891 пишет:
попробуйте в заголовке делать так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. header("Content-Disposition: attachment; filename=\"".$itemName."\"");
  3.  


не помогло. ошибка не в названии файла. он латинский, да и знаки переганяет, если что-то не так.

esterio пишет:
Как на PHP скачать файл


если бы ошибка была в неправильных хедерах, я бы сюда не писал.

я подозреваю, что ошибка в кодировке выходящего файла, но не могу понять, почему все именно так.
 
 Top
Мелкий Супермодератор
Отправлено: 19 Февраля, 2014 - 13:54:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Первый 3 байта в скачанном файле - ef bb bf.
Если ещё не сталкивались - это метка BOM. Скрипты должны сохраняться в UTF8 без BOM.


-----
PostgreSQL DBA
 
 Top
marty_ny
Отправлено: 22 Февраля, 2014 - 11:04:39
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




Мелкий пишет:
Первый 3 байта в скачанном файле - ef bb bf.
Если ещё не сталкивались - это метка BOM. Скрипты должны сохраняться в UTF8 без BOM.


файл, содержащий скрипт, был сохранен в utf-8 без bom и раньше.
перегнал все файлы проекта в ту же кодировку, но ничего не изменилось(((
 
 Top
Мелкий Супермодератор
Отправлено: 22 Февраля, 2014 - 11:15:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Попробуйте пройтись вот этим скриптом по проекту: http://forum.php.su/topic.php?fo...35&topic=101
Где-то эти 3 несчастные байта выводятся.


-----
PostgreSQL DBA
 
 Top
marty_ny
Отправлено: 22 Февраля, 2014 - 11:35:39
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




Мелкий пишет:
Попробуйте пройтись вот этим скриптом по проекту: http://forum.php.su/topic.php?fo...35&topic=101
Где-то эти 3 несчастные байта выводятся.


Спасибо огромное!
Вы не поверите! неделю искал эту bom-метку. даже написал bash скрипт, им прогнал проект, в ручную перебирал все обработчики и даже шаблоны (чем черт не шутит).
а благодаря вашей ссылочке нашел файл за 1 минуту.
и как бы вы думали, где он был? в индексном файле, который запускает всю систему.
это просто невероятно(((

Еще раз спасибо огромное!
(Добавление)
хотел плюсонуть, но
количество сообщений оставленных Вами на форуме, недостаточно для данной операции
буду писать и плюсону позже.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB