#php #json #laravel #csv
#php #json #laravel #csv
Вопрос:
У меня есть следующий код, который загружает файл .csv. Это работает нормально.
public function csv(Export $export)
{
$buffer = $export->getCsvData_();
return response()->streamDownload(
function () use ($buffer) {
$file = fopen('php://output', 'w');
fputs($file, $buffer);
fclose($file);
},
"$export->filename.$export->file_extension",
[
"Content-type" => "text/csv",
"Content-Disposition" => "attachment; filename=$export->filename.$export->file_extension",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
]
);
}
Мне нужно прочитать этот буфер .csv и преобразовать файл CSV в файл JSON и загрузить его как файл JSON. Итак, прежде всего, я попытался преобразовать .csv в объект JSON следующим образом:
public function json(Export $export)
{
$buffer = $export->getCsvData_();
$file = response()->streamDownload(
function () use ($buffer) {
$file = fopen('php://output', 'w');
fputs($file, $buffer);
fclose($file);
},
"$export->filename.csv",
[
"Content-type" => "text/csv",
"Content-Disposition" => "attachment; filename=$export->filename.csv",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
]
);
$csv = file_get_contents($file);
print_r($file);
$array = array_map("str_getcsv", explode("n", $csv));
$json = json_encode($array);
print_r($json);
}
Я переношу CSV в $file и использую file_get_content и другие функции PHP. Но ‘print_r($json);’ дает мне нулевое значение.
Как это исправить? Есть ли лучший способ загрузить сгенерированный CSV в формате JSON?
Заранее благодарю вас.
Ответ №1:
Давайте попробуем
public function json(Export $export)
{
$buffer = $export->getCsvData_();
$file = response()->streamDownload(
function () use ($buffer) {
$file = fopen('php://output', 'w');
fputs($file, $buffer);
fclose($file);
},
"$export->filename.csv",
[
"Content-type" => "text/csv",
"Content-Disposition" => "attachment; filename=$export->filename.csv",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
]
);
//$file is the csv file URL
$CSV_Data_Array = [];
$file_handle = fopen($file, 'r');
while (!feof($file_handle) ) {
$CSV_Data_Array[] = fgetcsv($file_handle);
}
fclose($file_handle);
//$csv = file_get_contents($file);
print_r($CSV_Data_Array);
//$array = array_map("str_getcsv", explode("n", $csv));
$json = json_encode($array);
print_r($json);
}