Firefox скачивает прикрепленные файлы (вложения) в виде index.php
Дата: 12 декабря, 2011 год
Самый наисвежайший SMF 2.0.1, самый последний на данный момент Firefox 8.0.1. При попытке скачать аттачмент к какому-либо сообщению на форуме, firefox предлагает сохранить файл с расширением index.php. При этом, если поменять расширение имени файла на исходное — то мы получим нужный нам файл. Что же в таком случае делать?
Для начала я полез смотреть отправляемые и принимаемые браузером http заголовки. И вот что обнаружил:
Возвращаемое имя приаттаченного файла было каким-то странным. Я проанализировал заголовки, принимаемые браузером Opera. Там приписки «UTF8″ к имени файла не было. Вообще, странно, значит, скрипт SMF в зависимости от браузера меняет в заголовке имя файла.
Ну чтож, полезли в сырцы. Отображение постов находится в файле Sources/Display.php, там же есть функция «Download()», которая отвечает за отдачу вложений. Поискав заветную приписку UTF8, я нашел забавный комментарий от самих разработчиков SMF:
// Different browsers like different standards...
А сразу за ним идет логика отдачи разного имени файла в зависимости от типа браузера. Если честно, я не стал разбираться, почему для Firefox сделали генерацию имени файла, отличную от других браузеров. Я тупо скопировал заголовок, выводящий имя файла для Оперы, в оператор для Firefox. И знаете, заработало :) Значит так, находим строку:
header('Content-Disposition: ' . $disposition . '; filename*="UTF-8\'\'' . preg_replace('~&#(\d{3,8});~e', '$fixchar(\'$1\')', $utf8name) . '"');
и заменяем ее этой:
header('Content-Disposition: ' . $disposition . '; filename="' . preg_replace('~&#(\d{3,8});~e', '$fixchar(\'$1\')', $utf8name) . '"');
Ну и пробуем, должно все работать.
Еще по теме: firefox, вложения, хаки
Категория: Хаки и доработки