2010-11-25 69 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始终关闭 :)