Это могут быть файлы xlsx, csv, png и т. д.
Для моих тестов это очень просто: у меня на сервере есть файл 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-методы для очистки буфера.. Но это всегда одно и то же.
Может ли это быть проблема с сервером?
Сервер — это Nginx на Ubuntu .
Версия PHP 8.3
Спасибо за помощь,
Подробнее здесь: https://stackoverflow.com/questions/793 ... -valid-php