处理csv文件fgetcsv& str_getcsv?

时间:2010-11-25 05:49:20

标签: php

我有一个三部分问题 fgetcsv str_getcsv 更好,有没有办法只允许.csv文件类型显示在文件上传对话框中?最后我/我需要使用 ini_set('auto_detect_line_endings',true);

<?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>";
}
?>

1 个答案:

答案 0 :(得分:10)

  

fgetcsv()是否优于str_getcsv()

是的,从文件打开时。仅当您的CSV已经作为程序中的字符串时才使用str_getcsv()

  

有没有办法只允许.csv文件类型显示在文件上传对话框中?

不,除非您使用Flash wrapper。但是,您可以使用JavaScript检测文件扩展名,并且必须仅接受使用PHP的.csv(使用pathinfo($filename, PATHINFO_EXTENSION))。

但是,确保其.csv不确认它实际上是CSV文件。

  

我/我是否需要使用ini_set('auto_detect_line_endings', true);

不,除非它不起作用。 The docs表示在使用它时会有轻微的性能损失。所以只在需要时才使用它。默认情况下它也是 off 。我发现,最好将php.ini中不太常见的东西保留为默认值。

虽然确保magic_quotesregister_globals 总是关闭 :)