Intereting Posts
Доступ к стоимости доставки в тележке Magento и / или оформлении заказа Переменные контрольные переменные в Phalcon Самый простой способ захватить файл удаленного файла в PHP? Почему строка, окруженная одинарными кавычками, не будет интерполировать имена переменных, которые она содержит в PHP, а с двойными кавычками? Как установить переменную среды командной строки в PHP shell_exec Изменение конфигурации базы данных CakePHP во всем мире Защитите от инъекций и правильного синтаксиса для метода $ _GET Декодировать URL в массив, а не строку Где я помещаю оператор sql для хранения в базе данных для blueimp / jQuery-File-Upload? PHP не может загрузить расширение php_curl.dll Я хочу преобразовать MySQL-запрос в PDO? Отладка ошибки PHP в IIS (как это связано с вызовами com-объектов) Узнайте HTTP-метод в PHP PHP htmlentities позволяют только <b> и <i> CodeIgniter – Загрузка изображения через форму, сохранение местоположения изображения в базе данных

Принудительная загрузка файла iscorrupted

У меня есть код загрузки файла на моем сайте, который отлично работал, пока я не изменил домен. Я проверил все ссылки и изменил все, и они работают FINE. По какой-то причине файл загружается поврежденным, и я не могу понять, почему.

Код:

header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$fileName.'"'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file_url)); readfile($file_url); exit; 

$ FileName имеет имя + расширение. $ file_url работает нормально. если я повторяю URL-адрес и пытаюсь перейти к нему, я вижу файл.

Любая помощь кому-то?

EDIT: я заметил, что браузер говорит: «Ресурс» интерпретируется как «Документ», но передается с типом MIME image / png

Related of "Принудительная загрузка файла iscorrupted"

Если загружаемые файлы являются изображениями (как указано в комментариях), заголовок Content-Type должен быть соответствующим типом mime для этого изображения, например. «image / jpeg», «image / png» и т. д.

 $size = getimagesize($file_url); header("Content-type: {$size['mime']}"); 

«application / octet-stream» не должен использоваться в этом экземпляре (часто использовался в прошлом, чтобы попытаться принудительно загрузить, поскольку браузер не обязательно знает, что с ним делать). Заголовок «Content-Disposition: attachment» является тем, что запускает загрузку.

Кроме того, вы указываете, что исходное имя файла находится на иврите … Заголовок «filename =» должен указывать имя файла в US-ASCII для совместимости. UTF-8 возможен, но только с некоторыми дополнительными «беспорядками» и, возможно, не совместим с некоторыми браузерами.

EDIT # 1

Если вы используете буферизацию вывода, вам может потребоваться убедиться, что выходной буфер пуст и сброшен, прежде чем пытаться загрузить файл, иначе все, что находится в выходном буфере, станет частью вашего загруженного файла, и оно будет повреждено.

 header('Content-Length: ' . filesize($file_url)); ob_clean(); // <<<< flush(); // <<<< readfile($file_url); 

EDIT # 2 – Content-Type

Следуя вашей ссылке на ответ на этот другой вопрос, который предлагает использовать приложение / октет-поток вместо изображения / jpg … ответ в этом вопросе цитирует RFC 2616 , однако это было заменено RFC 6266, где указано:

Согласно RFC 2616, тип привязки типа «привязка» применяется только к содержимому типа «application / octet-stream». Это ограничение было удалено, так как получатели на практике не проверяют тип содержимого, а также препятствуют правильному объявлению типа носителя.

Итак, правильнее указать правильный тип mime для изображения (как упоминалось выше). Хотя, в конце концов, важно то, что работает для вас, поскольку серверы / браузеры различаются и не обязательно соответствуют стандартам, к сожалению.

Чтобы дополнительно создать аргумент для указания правильного типа mime и не использовать «application / octet-stream», см. Следующий принятый ответ на вопрос о веб-мастерах …

Что может заставить Chrome загружать файлы?