[英]PHP code to download CSV file not working
我有以下代碼,在其中生成隨機數,然后嘗試將其下載為CSV文件。
如果我在其他文件上嘗試單獨使用CSV代碼段,則可以使用,但是在此代碼中,它無效。 我確實看到了隨機數,但沒有下載CSV文件。
<?php
$dataarray=array();
function convert_to_csv($input_array, $output_file_name, $delimiter)
{
$temp_memory = fopen('php://memory', 'w');
foreach ($input_array as $line)
{
fputcsv($temp_memory, $line, $delimiter);
}
fseek($temp_memory, 0);
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $output_file_name . '";');
fpassthru($temp_memory);
}
for ($i = 0; $i <= 25000; $i++)
{
$num = (rand(50,110));
array_push($dataarray,"$num");
echo "Hearbeat #" .$i . "\t\t ------ " . $num;
echo "<br>";
}
convert_to_csv($dataarray, 'data_as_csv.csv', ',');
?>
與發送報頭之前輸出數據header()
是指header()
調用將沒有任何效果。 因此,在標頭之前不發送任何內容是合理的。
提到的另一個答案fputcsv
第二個參數必須是數組,因此我也將調用更改為fputcsv
。
如果您希望所有值都以逗號作為分隔符寫入csv文件, $input_array
直接傳遞給fputcsv
。
因此,您的代碼如下所示:
<?php
$dataarray=array();
function convert_to_csv($input_array, $output_file_name, $delimiter)
{
$temp_memory = fopen('php://memory', 'w');
// Option 1 - every number will be on a new line
foreach ($input_array as $line)
{
// add `array($line)` not `$line`
fputcsv($temp_memory, array($line), $delimiter);
}
// Option 2 - all numbers will be in
// one line with `$delimiter` as separator
fputcsv($temp_memory, $input_array, $delimiter);
fseek($temp_memory, 0);
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $output_file_name . '";');
fpassthru($temp_memory);
}
for ($i = 0; $i <= 25000; $i++)
{
$num = (rand(50,110));
array_push($dataarray,"$num");
// this two lines are nor needed
//echo "Hearbeat #" .$i . "\t\t ------ " . $num;
//echo "<br>";
}
convert_to_csv($dataarray, 'data_as_csv.csv', ',');
實際上,問題出在您的convert_to_csv
函數中。 fputcsv
期望第二個參數為數組,在您的情況下為字符串。 您有2種選擇,具體取決於您想要的:
1)每個數字放在單獨的行中:只需將fputcsv
函數調用更改為: fputcsv($temp_memory, [$line], $delimiter);
2)同一行中的所有數字都用$delimiter
:
function convert_to_csv($input_array, $output_file_name, $delimiter)
{
$temp_memory = fopen('php://memory', 'w');
fputcsv($temp_memory, $fields, $delimiter);
fseek($temp_memory, 0);
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $output_file_name . '";');
fpassthru($temp_memory);
}
並且(我確定您已經知道),對於要自動下載的文件,您不得echo
任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.