2011-04-14 134 views
5

我的一位客户的所有产品信息都由外部来源处理。他们已经提供给我一个CSV文件,他们会定期更新并上传到我的规范的ftp文件夹中,比如说每周。自动导入CSV文件并上传到数据库

在这个CSV文件中是所有的产品信息;产品名称,规格,图像位置等

我为我的客户建立的网站正在运行一个MySQL数据库,我认为这个数据库将持有所有的产品信息,因此已经被构建来处理所有的产品数据。

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

这是甚至possbile?

任何帮助将不胜感激,因为我不希望使用IFrame的选项,S.

回答

0

,你会不得不看看fgetcsv?您可能必须设置一个cron作业来定期检查新文件。

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

并通过cronjob运行此... – Tobias 2011-04-14 12:12:26

3

应该非常直截了当取决于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

如果CSV很难用fgetcsv 解析你可以尝试像PHPExcel项目具有csv阅读能力

http://phpexcel.codeplex.com

0

所有你需要的是:

  • 储存最后文件的mtime地方(比方说,为了简单起见,在另一个文件)运行由cron

每隔X分钟在

  • 脚本这个脚本你简单地使用存储值的csv文件的时间。如果修改时间不同,运行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比你的“帮手”文件要大,你应该触摸它并执行查询。

    在LOAD DATA INFILE SQL语句文档是here

    当然有用于查询错误的房间,但我希望你将处理它(你只需要确保数据在这种情况下,触摸正确和唯一的加载文件或写入新的时间)。