Для моих тестов это очень просто, я получил файл output.csv на своем сервере, расположенный в /tmp/output.csv
Я получил этот код, очень простой:
Код: Выделить всё
public static final function downloadExcel($finalData) {
$csvFile = "/tmp/output.csv";
if (ob_get_level()) {
ob_end_clean();
}
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . basename($csvFile) . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($csvFile));
readfile($csvFile);
exit;
}
Когда загрузка завершается, у меня всегда возникает ошибка: файл Excel не может открыться, поскольку формат файла или расширение файла недействительны (если я попробуйте с файлом xlsx). С изображениями то же самое, пишет, что формат плохой.
За исключением файлов .csv, все работает, и благодаря этому файлу я обнаружил, что в начале вставлен разрыв строки файла.
Итак, я подозреваю, что эта новая линия разрыва ответственна за все проблемы, когда я загружаю другие файлы. Если я попытаюсь открыть файл xlsx, например, с помощью VS Code, я также получу разрыв строки в начале файла.
Я пробовал много вещей, много кода с любыми методами ob. очистить буфер, но это всегда одно и то же. Все мои теги
Подробнее здесь: https://stackoverflow.com/questions/793 ... -not-valid