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');

Как использовать PHPExcel

Если содержимое файла 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).'"');
Другие вопросы по тегам