【问题标题】:Add new row in CSV using PHP使用 PHP 在 CSV 中添加新行
【发布时间】:2022-01-21 10:00:24
【问题描述】:

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

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

【问题讨论】:

  • 你说的“但是可以在文件末尾添加数据”是什么意思?这不是您想要的以及该功能的作用吗?请澄清(给我们一个适当的例子)并包括您的实际代码(我们不知道您的实现是什么样的)。 atm有点太不清楚了。
  • 在打开文件时使用aa+ 选项以在写入时附加到文件末尾。然后只是 fputcsv。或者使用fseek 手动将指针移动到其末尾。 php.net/manual/de/function.fopen
  • @M.Eriksson,编辑了它
  • edit您的问题包括您的代码,而不是将其发布在 cmets 中(它非常不可读)
  • @MukashWasti - 下一次:这就是为什么超级重要你要对你的问题给出一个清晰准确的描述。那么我们可能会更快地解决它。

标签: php csv fopen fwrite fputcsv


【解决方案1】:

在调用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);

?>

【讨论】:

  • 我添加了我的代码
  • 如果我没有将我的 csv 文件的名称放在定义方法中,它可以正常工作,但是当我添加服务器上的 db.csv 时,代码不会影响 db。 csv
  • 您的代码是否有效?我将您的代码添加到我的答案中,并使用正则表达式将explode() 替换为preg_split(),以便它处理逗号字符周围的最终空格。它在我的电脑上运行良好。
  • 您对服务器上的文件有写权限吗?如果没有,请更改用户或组,以便您的 PHP 用户可以写入文件。理想情况下,chmod ug=rw,o=r db.csv 为文件用户和组授予读写权限,但只为其他用户授予读取权限。或者,如果您必须为所有用户执行此操作,那么 chmod ugo=rw db.csv 但它不是很安全,因为服务器上的任何人都可以修改它。
  • 是的,它的权限问题.. 谢谢
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多