Проблема с PHP readfile () дамп двоичных данных в браузер - PullRequest
0 голосов
/ 06 сентября 2011

Я пытаюсь принудительно загрузить браузером вот мой код:

header("Content-Type: application/force-download"); 
header('Content-type: audio/mp3');
header('Content-Description: File Download');
header('Content-Disposition: attachment; filename=' . $file_name);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-length: ' . filesize($file_path);
ob_clean();
flush();
readfile($file_path);

Это прекрасно работает на моем локальном компьютере, но когда я загружаю его на свой работающий сервер, двоичный файл выгружается в браузер, и эти бессмысленные символы заполняют окно браузера. В чем может быть проблема? Я на общем сервере, поэтому не знаю, нужно ли изменить конфигурацию apache или что-то в этом роде.

Я взял совет @sanmi и использовал Firebug, чтобы увидеть заголовок ответа, и вот что я получил:

Here is what I got sanmai: 
Server  nginx/0.7.67
Date    Tue, 06 Sep 2011 15:02:03 GMT
Content-Type    text/html; charset=UTF-8
Transfer-Encoding   chunked
Connection  keep-alive
Expires Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0   
Pragma  no-cache
Vary    Accept-Encoding,User-Agent
Content-Encoding    gzip

Я вижу, что запись типа контента изменилась на text / html, и что сервер на самом деле является nginx. Так это проблема nginx или мои записи в заголовке неверны?

Спасибо, Tsega

Ответы [ 4 ]

0 голосов
/ 09 сентября 2011

Получается, что у одного из моих файлов после закрывающего тега php была пустая строка. В этом была проблема, спасибо всем за помощь.

0 голосов
/ 06 сентября 2011

Используйте FireBug или и другие средства для просмотра HTTP-заголовков, которые фактически отправляет ваш сервер.Это может скрыть или изменить любого из них.Если это так, обратитесь в службу поддержки вашего хостинга.

0 голосов
/ 06 сентября 2011

Я не уверен, может ли это быть причиной, но тип контента audio / mp3 не определен (официально): http://www.iana.org/assignments/media-types/audio/index.html. Попробуйте использовать аудио / MPEG?

0 голосов
/ 06 сентября 2011

Здесь

header("Content-Type: application/force-download"); 
header('Content-type: audio/mp3');

Вы отправляете два Content-Type, необходим только один.

...