自动导入CSV文件并上传到数据库

7
我的一位客户将所有产品信息都由外部来源处理。他们提供了一个CSV文件给我,每周会定期更新并上传到我指定的FTP文件夹中。这个CSV文件包含了所有的产品信息,如产品名称、规格、图片位置等。
我为客户建立的网站正在运行MySQL数据库,我原以为它将持有所有的产品信息,因此已经构建好了处理所有产品数据的功能。
我的问题是:我该如何创建和运行一个脚本来查找指定FTP文件夹中的新添加CSV文件、提取其中的数据,并自动地替换相关MySQL表中的所有数据呢?
这是否可能实现?
如果你能提供任何帮助,我将不胜感激,因为我不想使用IFrame选项。
4个回答

5
您可以编写一个脚本,使用 PHP 的 fread 函数读取 csv 文件,提取每一行并将其格式化为数组,以便插入到数据库中。
$fileTemp = "path-of-the-file.csv";
$fp = fopen($fileTemp,'r');
$datas = array()
while (($data = fgetcsv($fp)) !== FALSE)
{
     $data['productName'] = trim($data[0]);
     $data['spec'] = trim($data[1]);
     $data['imageLocation'] = trim($data[2]);
     $datas[] = $data;
}

现在您已经准备好了数组$datas,可以通过迭代将其插入数据库。

5

根据CSV文件的不同,应该相对简单。

有些CSV文件在文本周围加上引号“”,有些则没有。一些引用字段内部包含逗号等。

这将取决于您的PHP技能水平,应该相对容易。

您可以从文件获取修改时间戳来查看其是否为新文件。

http://nz.php.net/manual/en/function.lstat.php

打开文件并导入数据。

http://php.net/manual/en/function.fgetcsv.php

插入到数据库中。

http://nz.php.net/manual/en/function.mysql-query.php

如果使用fgetcsv解析CSV很困难,则可以尝试像PHPExcel项目这样具有CSV读取功能的工具。

http://phpexcel.codeplex.com


1

你所需要的是:

  • 将上一个文件的mtime存储在某个地方(为了简单起见,我们假设是另一个文件)
  • 每隔X分钟由cron运行的脚本

在这个脚本中,你只需比较csv文件的mtime与存储值即可。如果mtime不同,则运行类似以下的SQL查询:

LOAD DATA LOCAL INFILE '/var/www/tmp/file.csv' REPLACE INTO TABLE mytable COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'

如果您想知道上次数据加载是什么时候,可以选择只touch您的文件。如果scv文件的修改时间比您的“helper”文件要晚,那么您应该触摸它并执行查询。

有关LOAD DATA INFILE SQL语句的文档在这里

当然,可能会出现查询错误的情况,但我希望您能处理好它(您只需要确保数据已正确加载,并且只有在这种情况下才触摸文件或编写新的修改时间)。


0

你看过fgetcsv了吗?你可能需要设置一个定时任务来定期检查新文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接