我的一位客户的所有产品信息均由外部来源处理。他们在CSV文件中向我提供了这个文件,他们会定期更新并上传到我的规范的ftp文件夹,比如说每周。
在此CSV文件中包含所有产品信息;产品名称,规格,图像位置等。
我为我的客户构建的网站正在运行一个MySQL数据库,我认为该数据库将包含所有产品信息,因此已构建用于处理所有产品数据。
我的问题是:如何创建和运行一个脚本,该脚本可以从指定的FTP文件夹中找到新添加的CSV文件,提取数据,并替换相关MySQL表中的所有数据,所有这些都完成了自动?
这是否可能?
我非常感谢任何帮助,因为我不想使用IFrame选项S.
答案 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读取功能
答案 2 :(得分:0)
答案 3 :(得分:0)
您只需要:
在此脚本中,您只需使用存储值的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)。