Есть несколько проблем с вашим кодом.
Расположение кода
Поскольку загрузка файла - это просто сервер, отправляющий кучу данных клиенту вместе с некоторыми заголовкамиэто говорит браузеру, как действовать на контент, вы не можете вывести ничего , кроме содержимого файла.Это также добавит это к содержимому файла (и ваш загруженный файл, скорее всего, будет поврежден).
Кроме того, любой header()
-вход должен быть перед любым выводом совсем.Сначала отправляются заголовки, затем контент.Поэтому, если вы уже вывели контент, вы не можете отправлять дополнительные заголовки.
Решения:
Переместите свой код в его собственный файл или переместите его в начало текущегофайл (перед любым другим выводом, таким как HTML и т. д.).Если он находится в верхней части, не забудьте добавить exit;
после кода, чтобы он также не мог выполнять синтаксический анализ и отправку HTML.
Вывод документа Excel
Ваш текущий кодфактически не выводит документ в любой момент.Все, что он делает, это сохраняет его на сервере, в /tmp/
-папке.
Решения:
Чтобы вывести документ вместо его сохранения, измените:
$writer->save('/tmp/temp.csv');
до
$writer->save('php://output'); // Send it to the output buffer instead
Если вы хотите сохранить и отправить его клиенту, вы можете попробовать (я не уверен, что это работает, но это должно), затем просто сохраните оба:
$writer->save('/tmp/temp.csv');
$writer->save('php://output');
Если это по какой-то причине не сработает, вы можете сначала сохранить его, а затем прочитать его обратно клиенту с помощью readfile () .Примерно так:
$writer->save('/tmp/temp.csv');
readfile('/tml/temp.csv');