У меня есть PHP-скрипт, который использует PHPExcel для открытия шаблона, вставки значений из запроса базы данных и возврата результата в браузер. Он отлично работает в Firefox, но в Internet Explorer (8), когда он пытается открыть файл, он ломается:
Internet Explorer не может загрузить generate.php из my.domain.
- PHPExcel в контроллере Zend2
- Некоторые вопросы о диаграммах PHPExcel
- PHPExcel удаляет стиль диаграммы при загрузке шаблона
- PHPExcel - форматирование теряется при редактировании кода
- PHPExcel - рендеринг графика и загрузка excel
Internet Explorer не смог открыть этот интернет-сайт. Запрошенный сайт либо недоступен, либо не может быть найден. Пожалуйста, повторите попытку позже.
Код, который я использую ( generate.php
), выглядит следующим образом:
// Open template $xlRead = PHPExcel_IOFactory::createReader('Excel5'); $xl = $xlRead->load('Template.xls'); $xl->setActiveSheetIndex(0); // Write data $xl->getActiveSheet()->fromArray($dbOutput, null, 'A1'); // Output to browser header('Last-Modified: '.gmdate('D, d MYH:i:s').' GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename=MyReport.xls'); $xlWrite = PHPExcel_IOFactory::createWriter($xl, 'Excel5'); $xlWrite->save('php://output')
EDIT Похоже, эта проблема влияет только на IE, когда поддерживается SSL. Таким образом, это идентичная проблема для нескольких подобных вопросов SO. Народный совет – настроить заголовки, но до сих пор ни одна комбинация того, что я видел как решения, не работала …
Если ни одно из вышеперечисленных не работает для вас, и вы все равно хотите работать под SSL, вы всегда можете записать файл на диск и предоставить ссылку для загрузки, или вы можете запросить у пользователя адрес электронной почты и отправить файл по электронной почте в виде вложения , Если вы отправляетесь по электронной почте, PHPMailer имеет довольно простой способ отправки вложений. Я не уверен на 100%, но я думаю, что файл нужно записать на диск, прежде чем его можно будет подключить с помощью PHPMailer, но вы всегда можете отменить связь с файлом сразу после отправки.
Все сводится к обработке IE заголовков, которые вы установили. Собственный ответ Microsoft на эту известную проблему должен решить все для вас.
Резюме их решения: «удалить заголовок или заголовки без кеша».