2011-04-14 77 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

    當然有用於查詢錯誤的房間,但我希望你將處理它(你只需要確保數據在這種情況下,觸摸正確和唯一的加載文件或寫入新的時間)。

  • 相關問題