Ошибка загрузки файла Internet Explorer при выполнении "readfile" - PHP
Я только что перенес веб-приложение на сервер Windows, и у меня возникли некоторые проблемы. Один из них - приложение хранит список имен файлов в таблице базы данных. когда файлы запрашиваются для загрузки, они отправляются на вывод путем отправки соответствующих заголовков (в зависимости от типа mime, а затем файла для чтения ("расположение документа/имя файла.расширение");
Он отлично работает в firefox, но если я попытаюсь загрузить в IE, он выбросит
IE не может загрузить этот документ из www.mysite.com .. IE не смог открыть этот интернет-сайт. Запрошенный файл либо недоступен, либо не может быть найденным. Пожалуйста, повторите попытку позже.
Поскольку он нормально работал на предыдущем сервере (не Windows), я попытался распечатать местоположение документа, и оно выглядело примерно так C:/Apache/htdocs/FILENAME.ext и я предполагаю, что этот C:/ вызывает проблемы в IE, но не в firefox??
Как мне заставить его работать правильно в IE??
Спасибо
ОБНОВЛЕНИЕ
У меня есть заставил его работать, добавив еще несколько заголовков среди прочих.. Я думаю, что первые 2 более важны для IE или около того (по крайней мере, пока работают на меня:)
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
3 answers
На этот вопрос уже был дан ответ здесь PHP: Принудительная загрузка файла и Т. Д., Еще раз
Это работает:
if (strstr($_HTTP_USER_AGENT, "MSIE")) {
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: doit-revalider, post-check = 0, pré-check = 0");
header("Content-Type: application de téléchargement; name=\"$sFilename\"");
header("Content-Length: $iTaille");
header("Content-Disposition: attachment; filename=\"$sFilename\"");
header("Content-Transfer-Encoding: binary");
} else {
header("Content-Type: application de téléchargement; name=\"$sFilename\"");
header("Content-Length: $iTaille");
header("Content-Disposition: attachment; filename=\"$sFilename\"");
}
Это случайно не через SSL? Если это так, то в MSIE есть целый ряд ошибок, которые могут повлиять на ваше приложение. Попробуйте установить очень короткое время кэширования.
Если он работает в Firefox с использованием того же сервера, то проблема вряд ли будет связана с путем на сервере. Хотя будьте осторожны, что (IME) IIS, похоже, в некоторых случаях туннелирует авторизацию от клиентов MSIE (но не других).