Php коды для загрузки файла Excel не работает
Я не могу загрузить файл Excel, он загружает файл, но у него нет содержимого, а его размер составляет 0 КБ. Это мой HTML-код.
<h5 style="color: red;">
<a href="2.php?file=files/Battle_Entry_form.xls" class="links">
Click here to download A Registration form
</a>
</h5> <br />
2.php (это мои php коды для скачивания файла excel)
<?php
if(isset($_GET['file'])){
$filename = $_GET['file'];
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.$filename.'"');
readfile("http://www.caledtech.com/batllewebsite/".$filename);
exit;
}
?>
Чего-то не хватает в моих кодах?
2 ответа
Просто добавьте эти строки в начало HTML, которые вы хотите конвертировать в Excel. Убедитесь, что над этими строками не напечатано никаких данных.
Рассмотрите возможность использования PHPExcel
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
$objWriter->save('php://output');
Если содержимое файла Excel содержит тарабарщину, попробуйте добавить ob_clean();
или ob_end_clean();
прямо перед сохранением в этой строке: $objWriter->save();
Руководство по PHP для readfile гласит:
URL-адрес может использоваться в качестве имени файла с этой функцией, если включены обертки fopen. Смотрите fopen() для более подробной информации о том, как указать имя файла. См. Поддерживаемые протоколы и оболочки для ссылок на информацию о возможностях, которые имеют различные оболочки, примечания по их использованию и информацию о любых предопределенных переменных, которые они могут предоставить.
Я думаю, что вы должны использовать file_get_contents вместо readfile:
echo file_get_contents("http://www.caledtech.com/batllewebsite/".$filename);
И я рекомендую вам использовать базовое имя для имени файла:
header('Content-Disposition: attachment; filename="'.basename($filename).'"');