2010-11-25 68 views
6

我有一個三部分的問題是fgetcsv好於str_getcsv有沒有辦法只允許.csv文件類型顯示在文件上傳對話框?最後應該/我需要使用ini_set('auto_detect_line_endings',true);處理csv文件fgetcsv&str_getcsv?

<?php 
if(isset($_POST['submit'])) 
    { 
    //$filename=$_POST['filename']; 
    $filename = file_get_contents($_FILES['uploadedfile']['tmp_name']); 
    $handle = fopen("$filename", "r"); 
    while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) 
    { 

     $import="INSERT into kmmb_member1(no_ahli,no_pin,nama,no_ic_baru,no_ic_lama) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')"; 
     mysql_query($import) or die(mysql_error()); 
    } 
    fclose($handle); 
    print "Import done"; 
    } 
    else 
    { 

     print "<form action='import.php' method='post'>"; 
     print "Type file name to import:<br />"; 
     // print "<input type='text' name='filename' size='20' /><br />"; 
     print "Select csv file: <input name='uploadedfile' type='file' /><br />"; 
     print "<input type='submit' name='submit' value='submit' /></form>"; 
    } 
?> 

回答

10

fgetcsv()str_getcsv()更好?

是的,從文件打開時。只有當您的程序中已經有CSV字符串時才使用str_getcsv()

有沒有辦法只允許.csv文件類型顯示在文件上傳對話框?

不,除非您使用Flash wrapper。但是,您可以使用JavaScript檢測文件擴展名,並且您必須必須只接受.csv與PHP(使用pathinfo($filename, PATHINFO_EXTENSION))。

但是,確保它有.csv不會確認它實際上是一個CSV文件。

如果我/我需要使用ini_set('auto_detect_line_endings', true);

沒有,除非它不工作。 The docs狀態在使用它時會有小的性能損失。所以只有在需要時才使用它。它也是默認關閉。最好將php.ini中不太常見的東西留給它們的默認值,我發現了。

雖然確保magic_quotesregister_globals始終關閉 :)