使用 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.csv
或 chgrp 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);
?>
我想将表单数据附加到存储在服务器上的 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.csv
或 chgrp 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);
?>