slo_nik
@slo_nik

Что происходит с файлом, подмена содержания?

Добрый день.
Проблема в следующем.
Есть сайт разработанный на yii2 framework.
Сделан функционал загрузки файлов .docx, .odt пользователем. Файл загружается на сервер, читается при помощи PHPWord и текст из файла записывается в базу данных. Ошибок в этот момент нет.

Файлы, после того как пользователь загрузит на сайт, скачивает корректор, чтобы проверить на ошибки.
При попытке скачать файла на компьютер ошибок не происходит, файл скачивается. Но если открыть файл на компьютере ms office или libre office(каждый файл открывается соответствующей программой), то в итоге видим следующее.

e0f6c72d77a547aea8900a97741e2c70.png
ebfc9abab707402abeef945362be4b32.pnge127992a4c5f466192d0fd1c8ba94820.png

Такое впечатление, что файл перезаписывается.

Тестируя сайт на двух локальных компьютерах и на стороннем хостинге подобного не происходит. Такая ошибка идёт только на том сайте, на котором расположен рабочий сайт.

Подскажите, пожалуйста, в чём может быть причина?

p.s. Проблема возникла недавно, до этого было всё нормально. Может это быть связано с настройками сервера?
  • Вопрос задан
  • 480 просмотров
Решения вопроса 1
@remzalp
Программер чего попало на чем попало
Если скачанный файл переименовать как .docx, то всё будет работать вполне успешно (убедитесь). Или умный браузер при скачивании неправильно обзывает (смотреть mimetype, как сказал Денис Акимкин ), или файл с сервера отдаётся с неправильным расширением.

Если файл генерится на лету и отдаётся из php, то метод принуждения - отдавать название файла с расширением прямо в заголовке:
header('Content-Disposition: attachment; filename="downloaded.docx"');

Что именно слетело - искать со стороны хостера.

===UPD
зафиксирую правильный ответ - неправильный файл стал содержать UTF-8 BOM в начале файла. Кто-то правил php скрипт и неправильно сохранил в уникоде.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Это кодировка
Ответ написан
EnterSandman
@EnterSandman
Эникей
отдаётся ли
header('Content-Type: application/msword');
или
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');

?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы