处理csv文件fgetcsv&str_getcsv?

acc*_*man 7 php

我有一个三部分问题是fgetcsvstr_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>";
}
?>
Run Code Online (Sandbox Code Playgroud)

ale*_*lex 11

fgetcsv()不是更好str_getcsv()

是的,从文件打开时.使用str_getcsv()只有当你有CSV已经在你的程序中的字符串.

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

不,除非您使用Flash包装器.但是,您可以使用JavaScript检测文件扩展名,并且必须仅接受.csvPHP(使用pathinfo($filename, PATHINFO_EXTENSION)).

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

我应该/我需要使用 ini_set('auto_detect_line_endings', true);

不,除非它不起作用.文档声明使用它会有很小的性能损失.所以只在需要时才使用它.它默认也是关闭的.php.ini我发现,最好将不太常见的东西留给他们的默认值.

虽然确保magic_quotesregister_globals始终关闭 :)