2015-08-14 22 views
0

在腳本中,我正在使用ftp從遠程服務器拉取csv。我在本地保存此文件,然後打開文件。我遍歷文件的所有內容匹配一個特定的值對它。如果匹配,腳本可以繼續。加速讀取文件內容的方法

說夠了。讓我們展示一些代碼...

$filename = 'ftp://.....'; 
$localCsv = '/tmp/'.date('Ymd').'.csv'; 
if (!file_exists($localCsv)) { 
    $content = file_get_contents($filename); 
    file_put_contents($localCsv, $content); 
} 

現在我們創建了該文件。我們可以繼續循環。

$handle = fopen($localCsv, "r"); 
while(!feof($handle)) { 
    $rows[] = fgets($handle); 
} 
fclose($handle); 

$results = array(); 
foreach ($rows as $rid => $row) { 
    $columns = explode("\t", $row); 
    $results[$columns[2]] = $columns; 
} 

if (array_key_exists($searchValue, $results)) { 
    ... Continue script ... 
} 

這種方法只有一個小問題。它很慢,幾乎要倒退。

+0

哪一位是慢..?獲取文件或循環播放它?什麼是.csv文件的文件大小?你有沒有考慮通過cURL來獲取文件? – MaggsWeb

+0

第一步是讀取/寫入還是第二步迭代需要時間? – BobbyTables

+0

這不是讀寫慢,因爲每天只做一次。 – Peter

回答

1

繼承人都在一起烘烤,也許這更快?

$handle = fopen($localCsv, "r"); 
$results = array(); 
while(!feof($handle)) { 
    $columns = explode("\t", fgets($handle)); 
    $results[$columns[2]] = $columns; 
    if ($columns[2] == $searchValue) { 
     //SEARCH HIT 
    } 
} 
fclose($handle); 

如果那不工作,你可以嘗試csv-specific methods是在PHP