Я собираюсь взять вживую веб-приложение, над которым я работал, и сейчас, конечно, обновляю код, чтобы все, что отлично работало на моем локальном хосте, работало на защищенном сервере. Одна из задач, которую выполняет это приложение, - создание и загрузка файлов. Все файлы создаются и записываются на сервер, но файлы .xls, .csv и .json загружаются без данных, даже если данные находятся в файлах на сервере. Файлы .xml, .zip и .sql загружаются с точными данными. Файл .xls или .json, содержащийся в файле .zip, вполне подойдет. Эта проблема не связана с IE, поскольку я использую Chrome. Также пробовал Safari с теми же результатами.
Вот что я делаю, чтобы загрузить Excel:
$excel_content = file_get_contents($download_file_name);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$file_name);
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
print chr(255).chr(254).mb_convert_encoding($excel_content, 'UTF-16LE', 'UTF-8');
Вот что я делаю, чтобы загрузить XML:
$xml_content = file_get_contents($download_file_name);
header("Content-Type: application/xml");
header("Content-Disposition: attachment; filename=\"".$file_name);
header("Content-Transfer-Encoding: UTF-8");
header("Pragma: no-cache");
header("Expires: 0");
print $xml_content;
Может ли кто-нибудь понять, почему Excel работает на моем локальном хосте, но не на моем сервере по протоколу https? Если это важно, у меня включен openssl, что подтверждается файлом info.php на сервере.
Команда печати загружает файл Excel. Команда mb_convert_encoding (которой предшествует знак порядка байтов UTF-16LE - chr (255) .chr (254)) позволяет символьным данным utf-8 из MySQL правильно отображаться в Excel. Я нашел это решение в StackOverflow, и оно работает на моем локальном хосте. Избавление от mb_convert_encoding на моем живом сервере не имело никакого значения.






print chr(255).chr(254).mb_convert_encoding($excel_content, 'UTF-16LE', 'UTF-8');что ты здесь делаешь?