Firefox скачивает прикрепленные файлы (вложения) в виде index.php

Дата: 12 декабря, 2011 год

Самый наисвежайший SMF 2.0.1, самый последний на данный момент Firefox 8.0.1. При попытке скачать аттачмент к какому-либо сообщению на форуме, firefox предлагает сохранить файл с расширением index.php. При этом, если поменять расширение имени файла на исходное — то мы получим нужный нам файл. Что же в таком случае делать?

Для начала я полез смотреть отправляемые и принимаемые браузером http заголовки. И вот что обнаружил:
Снимок экрана 2011-12-12 в 21.54.38

Возвращаемое имя приаттаченного файла было каким-то странным. Я проанализировал заголовки, принимаемые браузером 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) . '"');

Ну и пробуем, должно все работать.

Еще по теме: , ,

Категория: Хаки и доработки

Comments are closed.

SEO Powered by Platinum SEO from Techblissonline