Я хочу, чтобы мои пользователи загружали файл .csv.
Код в моем контроллере работает безупречно на моей локальной машине и на сервере разработки. Однако он не работает на производственном сервере.
Фреймворк: Laravel 5.5.44
Версия PHP: 7.2
$videos = Video::whereNotNull('title')->get();
//First row for labels
$list = array([
'id' => 'Video ID',
'director' => 'Director',
'title' => 'Title',
]);
foreach($videos as $video) {
$list[] = [
'id' => $video->id,
'director' => $video->director,
'title' => $video->title,
];
}
$today = date('Ymd');
$filename = $today.'-list.csv';
$fp = fopen(storage_path($filename), 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
return response()->download(storage_path($filename));
При запуске контроллерана рабочем сервере вместо загрузки файла я получаю prod.ERROR: The content cannot be set on a BinaryFileResponse instance.
.
Я только что заметил, что исключение выдается, только если среда приложения настроена на производство.
Мне удалось воспроизвести поведение на моем локальном компьютере, установив
APP_ENV=prod
в файле .env
.
Я озадачен. Мне не удалось найти достаточно информации в официальной документации, и я до сих пор не знаю, как решить эту странную проблему.