Проблема в том, что в форуме SMF версии 2.0 при скачивании вложений в новом фаерфоксе 8.0 ( FireFox 8 ) имя файла отдается не нужное, а index.php.
Вложения в SMF отдаются через PHP, т.е. передается заголовок и отправляется содержимое, вот в заголовке то вся и проблема.
оно отдается вот так
header('Content-Disposition: attachment; filename="datasheet.pdf"');
в старых фаерфоксах тебе предложит сохранить файл datasheet.pdf а в новом почему то имя будет index.php
решение - сделать так
header('Content-Disposition: attachment; filename=datasheet.pdf');
(предварительно вырезав все пробелы из имени файла)
открываем файл Sources/Display.php и находим строки
меняем на
теперь имя файла в фаерфоксе 8.0 передается правильно, но вот проблема с именами типа "Контрольная работа.doc" остается, файл сохраняется как "Контрольная" и расширение файла приходится дописывать самостоятельно после сохранения. Можно конечно же заставить посетителей форума делать правильные имена, а можно исправить и эту проблему следющим образом:
находим строчку (в том же самом файле)
и после нее вставляем строку
теперь файл при сохранении будет иметь имя "Контрольная_работа.doc"
P.S.: Данное решение не совсем правильное, но я лично решил проблему так,
если вы знаете более рациональное решение, отписывайтесь в комментариях.
Вложения в SMF отдаются через PHP, т.е. передается заголовок и отправляется содержимое, вот в заголовке то вся и проблема.
оно отдается вот так
header('Content-Disposition: attachment; filename="datasheet.pdf"');
в старых фаерфоксах тебе предложит сохранить файл datasheet.pdf а в новом почему то имя будет index.php
решение - сделать так
header('Content-Disposition: attachment; filename=datasheet.pdf');
(предварительно вырезав все пробелы из имени файла)
открываем файл Sources/Display.php и находим строки
if ($context['browser']['is_firefox'])
header('Content-Disposition: ' . $disposition . '; filename*="UTF-8\'\'' . preg_replace('~&#(\d{3,8});~e', '$fixchar(\'$1\')', $utf8name).'"');
меняем на
if ($context['browser']['is_firefox'])
header('Content-Disposition: ' . $disposition . ';
filename*=UTF-8\'\'' . preg_replace('~&#(\d{3,8});~e',
'$fixchar(\'$1\')', $utf8name));
теперь имя файла в фаерфоксе 8.0 передается правильно, но вот проблема с именами типа "Контрольная работа.doc" остается, файл сохраняется как "Контрольная" и расширение файла приходится дописывать самостоятельно после сохранения. Можно конечно же заставить посетителей форума делать правильные имена, а можно исправить и эту проблему следющим образом:
находим строчку (в том же самом файле)
$utf8name = !$context['utf8'] && function_exists('iconv') ? iconv($context['character_set'], 'UTF-8', $real_filename) : (!$context['utf8'] && function_exists('mb_convert_encoding') ? mb_convert_encoding($real_filename, 'UTF-8', $context['character_set']) : $real_filename);
и после нее вставляем строку
$utf8name = str_replace(' ', '_', trim($utf8name));
теперь файл при сохранении будет иметь имя "Контрольная_работа.doc"
P.S.: Данное решение не совсем правильное, но я лично решил проблему так,
если вы знаете более рациональное решение, отписывайтесь в комментариях.
Комментариев нет:
Отправить комментарий