【问题标题】:Automatically import CSV file and upload to database自动导入CSV文件并上传到数据库
【发布时间】:2011-04-14 11:59:01
【问题描述】:

我的一个客户的所有产品信息都由外部来源处理。他们以 CSV 文件的形式提供给我,他们会定期更新并上传到我的规范的 ftp 文件夹,比如每周。

此 CSV 文件中包含所有产品信息;产品名称、规格、图片位置等

我为我的客户建立的网站正在运行一个 MySQL 数据库,我认为它会保存所有的产品信息,因此已经构建为处理所有的产品数据。

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

这可能吗?

任何帮助将不胜感激,因为我不想使用 IFrame 选项,S。

【问题讨论】:

    标签: php mysql csv


    【解决方案1】:

    你只需要:

    • 将最后一个文件的 mtime 存储在某处(为简单起见,我们假设在另一个文件中)
    • cron 每 X 分钟运行一次的脚本

    在此脚本中,您只需 mtime 存储值的 csv 文件。如果 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)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您可以使用 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,您可以通过迭代将其插入数据库。

        【讨论】:

          【解决方案4】:

          你看过fgetcsv吗?您可能必须设置一个 cron 作业以定期检查新文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-09
            • 1970-01-01
            • 2012-02-10
            • 2015-10-12
            • 2014-11-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多