2015-06-19 43 views
1

我有下面的代碼,但它運行不正常。它只讀取csv文件的第一行,爲什麼?有誰能夠幫助我?我很沮喪:(fgetcsv只讀csv文件的第一行(更新:包括解決方案)

$handle = fopen($_FILES['prof_datei']['tmp_name'], "r"); 

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $insert_profs_data = $db->prepare("INSERT INTO professoren (name, titel_prof, titel_dr, titel_ing) VALUES (:eins, :zwei, :drei, :vier)"); 
    $insert_profs_data->bindParam(':eins', $data[0]); 
    $insert_profs_data->bindParam(':zwei', $data[1]); 
    $insert_profs_data->bindParam(':drei', $data[2]); 
    $insert_profs_data->bindParam(':vier', $data[3]); 
    $insert_profs_data->execute(); 
} 

fclose($handle); 

Update解決方案:

ini_set('auto_detect_line_endings', true); 
+0

添加CSV中的前10行,以便我們可以幫助您 – codeneuss

+0

也許是因爲$ _FILES ['prof_datei'] ['tmp_name']'中的文件是一個臨時文件,在完成此腳本時將被刪除。可能是MySQL擴展中的某些東西給PHP提供了腳本完成的想法,然後PHP刪除該文件。嘗試將它移動到一個真實的文件,處理它,然後刪除它。 – RiggsFolly

+3

[fgetcsv()](http://www.php.net/manual/en/function.fgetcsv.php)的PHP文檔中的一個注意事項是:'注意:如果PHP沒有正確識別行結束時讀取Macintosh計算機上或由Macintosh計算機創建的文件,啓用auto_detect_line_endings運行時配置選項可能有助於解決問題。' –

回答

1

過帳:如果您正在使用Mac努力執行該代碼,您應打開文件之前添加以下代碼行根據馬克·貝克和佐尼的意見回答。

在Mac(OS X),並使用不同的行結束可能還有其它的操作系統,你可以通過設置auto_detect_line_endings爲true,讀取文件之前。

ini_set('auto_detect_line_endings', true); 
$contents = file('unknowntype.txt'); 

這應該解決PHP只讀取文件第一行的問題。