2017-03-14 35 views
0

我比較PHP中的兩個CSV文件。我只想知道列名是相同的並且對數據不感興趣(至少現在是這樣)。比較PHP中兩個CSV文件內存不足

這是一個處理任何我選擇上傳的CSV文件的通用腳本。我上傳的文件與設置的示例文件進行比較(因此,如果提供了示例,我只能上傳文件)。這個示例文件只包含幾行數據,所以在任何一段時間內都不會很大。我上傳的文件可以從500kb到大約10mb(我上傳的文件是7,827,180字節)。

一切都被罰款,直到今天,當我開始得到這個消息: 「致命錯誤:內存(分配524288)(試圖分配7835372個字節)在C:\ XAMPP \ htdocs中\ errcoaching \程序\處理\第8" 行(第8行file_upload_parse.php指我的樣品(我的函數內的第一行)中到線路2。

function check_csv($f_a, $f_b){ 
    $csv_upload = array_map("str_getcsv", file($f_a,FILE_SKIP_EMPTY_LINES))[0]; // This is line 8 
    $csv_sample = array_map("str_getcsv", file($f_b,FILE_SKIP_EMPTY_LINES))[0]; 
    $match = 'true'; 
    foreach ($csv_sample as $key => $value) { 
     if($value != $csv_upload[$key]){ 
      $match = 'false'; 
      break 1; 
     } 
    } 
    return $match; 
} 

回答

0

您正在閱讀整個文件到一個數組,然後disgarding所有,但第一線

取而代之,您可以使用http://php.net/manual/en/function.fgetcsv.php來只讀第一行:

$handle_a = fopen($f_a, "r"); 
$handle_b = fopen($f_b, "r"); 
$csv_upload = fgetcsv($handle_a); 
$csv_sample = fgetcsv($handle_b); 
//the rest of your code 
fclose($handle_a); 
fclose($handle_b); 

你或許應該也處理文件讀取錯誤

+0

感謝的是,我會給它一個去,但肯定感覺不錯! –