Всем доброго времени суток!У меня есть сервер Apache 2.0 + PHP 5. Есть скрипт навигации по файловой системе с поддержкой загрузки файлов.
*********
...
/* вызывается при загрузке файла... */
function do_download($path, $file) {
$get_path = strip_junk($path);
$get_file = strip_junk($file); /* fopen adds \ to ' - so we strip 'em. */
header("Content-Disposition: atachment; filename=" . $get_file);
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize(DOWNLOAD_PATH . "/$get_path/$get_file"));
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
$fp = fopen(DOWNLOAD_PATH . "/$get_path/$get_file", "rb");
fpassthru($fp);exit;
}
...
*********Проблема в том, что при загрузке файлов через IE, к каждому файлу в начало добавляются 2 байта - 0D 0A (перевод строки и возврат карретки). Причем такая "фитча" наблюдается только при использовании IE, а если использовать Firefox или Opera, то загрузка идет без ошибок. Кто-нибь знает в чем тут дело? Куда смотреть? В настройки сервера или браузера, или в сам код скрипта?
Перехват запросов и ответов HTTP Tracer'ом подтверждает то, что сервер возвращает правильный размер файла через Content-Length.
>Проблема в том, что при загрузке файлов через IE, к каждому файлу
>в начало добавляются 2 байта - 0D 0A (перевод строки и
>возврат карретки). Причем такая "фитча" наблюдается только при использовании IE, а
>если использовать Firefox или Opera, то загрузка идет без ошибок. Кто-нибь
>знает в чем тут дело? Куда смотреть? В настройки сервера или
>браузера, или в сам код скрипта?у меня подозрение, что где-то до начала вывода файла ты пишешь перевод строки в stdout - напр.
<?php require 'lib.inc'; passthru($file); ?>
lib.inc (with hidden chars shown):
<?php\r\n
some routines...\r\n
?>\r\n^^^^
обычно такого вида. это не может объяснить нормальное поведение оперы/файрфокса (обход станд. ошибки?), но попробовать стоит
было аналогичное один раз - только без загрузки файла - а просто вывод содержал один кракозябл (только под IE) Ломали голову - потом посмотрели исходник под MC в линухах и обнаружили, что тама ескейп последоватиельность в выводе осталась - попробуйте - может поможет :)С уважением, Сергей