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

时间:2011-04-14 11:59:02

标签: php mysql csv

我的一位客户的所有产品信息均由外部来源处理。他们在CSV文件中向我提供了这个文件,他们会定期更新并上传到我的规范的ftp文件夹,比如说每周。

在此CSV文件中包含所有产品信息;产品名称,规格,图像位置等。

我为我的客户构建的网站正在运行一个MySQL数据库,我认为该数据库将包含所有产品信息,因此已构建用于处理所有产品数据。

我的问题是:如何创建和运行一个脚本,该脚本可以从指定的FTP文件夹中找到新添加的CSV文件,提取数据,并替换相关MySQL表中的所有数据,所有这些都完成了自动?

这是否可能?

我非常感谢任何帮助,因为我不想使用IFrame选项S.

4 个答案:

答案 0 :(得分: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,您可以通过迭代将其插入到数据库中。

答案 1 :(得分:4)

应该非常简单,具体取决于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

答案 2 :(得分:0)

你看过fgetcsv了吗?您可能需要设置一个cron作业来定期检查新文件。

答案 3 :(得分:0)

您只需要:

  • 将某个文件的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的文件mtime比你的“helper”文件大,那么你应该触摸它并执行查询。

有关LOAD DATA INFILE的文档SQL语句为here

当然有查询错误的空间,但我希望你能处理它(你需要确保数据正确加载,只有在这种情况下触摸文件或写新的mtime)。