使用 PHP 在 CSV 中添加新行

Add new row in CSV using PHP

我想将表单数据附加到存储在服务器上的 CSV 文件中,数据应作为新行添加。 我试过了

$list = array(
    'Peter,Griffin,Oslo,Norway,Norway,Norway,Norway,Norway',
    'Glenn,Quagmire,Oslo,Norway,Norway,Norway,Norway,Norway',
);
print_r($list);
$file = fopen('db.csv','a');  // 'a' for append to file - created if doesn't exit

foreach ($list as $line){
  fputcsv($file,explode(',',$line));
}

fclose($file); 

但无法在文件末尾添加数据。 我怎样才能做到这一点?

在调用 fputcsv():

之前,您应该以追加模式 fopen(FILENAME, 'a'); 打开 CSV 文件
<?php

define('FILENAME', 'file.csv');

$lines = [
   ['aaa', 'bbb', 'ccc'],
   ['123', '456', '789'],
   ['Quotes " get repeated twice', 'If commas , then it will be surounded by quotes', 'ccc'],
];

// Fill the CSV file.
$file = fopen(FILENAME, 'w');
foreach ($lines as $fields) {
    fputcsv($file, $fields);
}
fclose($file);

// Add a new line at the end of the file
$file = fopen(FILENAME, 'a');
fputcsv($file, ['another', 'line', 'at the end']);
fclose($file);

?>

重要的是您拥有 CSV 文件的写入权限,否则您将无法向其追加数据。文件的用户和组可能与PHP进程不一样。这在很大程度上取决于您的托管服务。最好的办法是检查您的 SSH 或 FTP 用户与您的网站 PHP 运行 是否在同一组中。如果两者都在同一个组中,那么你可以只给用户和组写权限,只为其他用户读取:

chmod ug=rw,o=r db.csv

或者甚至没有其他用户的读取权限,这样就更好了:

chmod ug=rw,o= db.csv

由您决定最好做什么。您还可以使用 chown username db.csvchgrp groupname db.csv 甚至 chown username:groupname db.csv.

更改文件的用户和组

我将 explode(',', $line) 替换为 preg_split('/\s*,\s*/', $line) 的代码,以便处理逗号字符周围的最终空格:

<?php

// Just to see the var_export() in plain text instead of HTML.
header('Content-Type: text/plain;charset=utf-8');

// With spaces or tabs around the commas for the preg_split() demo.
$lines = array(
    "Peter,\tGriffin,Oslo,   Norway,Norway  ,Norway, Norway,Norway",
    'Glenn, Quagmire, Oslo, Norway, Norway, Norway, Norway, Norway',
);

var_export($lines);

$file = fopen('db.csv', 'a');

foreach ($lines as $line) {
    fputcsv($file, preg_split('/\s*,\s*/', $line));
}
    
fclose($file);

?>