通过PHP导入CSV
我正在将.CSV导入具有以下内容的应用程序:通过PHP导入CSV,php,csv,import,Php,Csv,Import,我正在将.CSV导入具有以下内容的应用程序: if (($handle = fopen($file, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); echo "<p> $num fields in line $row: <br /></p>\n"; $row
if (($handle = fopen($file, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
if(($handle=fopen($file,“r”))!==FALSE){
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
$num=计数($data);
echo“$num字段位于第$row行:
\n”;
$row++;
对于($c=0;$c<$num;$c++){
echo$data[$c]。“
\n”;
}
}
fclose($handle);
}
这算是可行的,但还远远不够完美。我想首先取出行头并将它们放入一个数组中,然后在每行循环以获取数据集
它似乎有划界问题,因为第一行(标题)也包括第二行的一些部分
我直接从Excel导出了.csv文件。不知道是否有编码技巧等我可能丢失。听起来你的
1000
限制不够长;您应该为该文件将其设置为足够高的值。。。或者设置为0
以获得无限(不推荐,因为它往往较慢)
首先将其设置为4096
或8192
,然后查看运行情况
// use 8kB buffer for reading comma delimited line
while (($data = fgetcsv($handle, 8192, ",")) !== FALSE) {
更新
好吧,再想想,也许你应该检查一下文件,确认几件事:
听起来你的
1000
限制不够长;您应该为该文件将其设置为足够高的值。。。或者设置为0
以获得无限(不推荐,因为它往往较慢)
首先将其设置为4096
或8192
,然后查看运行情况
// use 8kB buffer for reading comma delimited line
while (($data = fgetcsv($handle, 8192, ",")) !== FALSE) {
更新
好吧,再想想,也许你应该检查一下文件,确认几件事:
fgetcsv
并不总是正确检测行尾
在fgetcsv调用之前尝试使用:
ini_set('auto_detect_line_endings', true);
fgetcsv
并不总是正确检测行尾
在fgetcsv调用之前尝试使用:
ini_set('auto_detect_line_endings', true);
我改成了8192,得到了同样的结果
while (($data = fgetcsv($handle, 8192, ",")) !== FALSE) {
...
}
然后做了这个,得到了同样的结果
$handle = fopen($_FILES['filename']['tmp_name'], "r");
ini_set('auto_detect_line_endings', true);
while (($data = fgetcsv($handle, 8192, ",")) !== FALSE) {
$data = array_map('mysql_real_escape_string', $data);
我改成了8192,得到了同样的结果
while (($data = fgetcsv($handle, 8192, ",")) !== FALSE) {
...
}
然后做了这个,得到了同样的结果
$handle = fopen($_FILES['filename']['tmp_name'], "r");
ini_set('auto_detect_line_endings', true);
while (($data = fgetcsv($handle, 8192, ",")) !== FALSE) {
$data = array_map('mysql_real_escape_string', $data);
CSV中的值可能包含换行符,因此此方法无法可靠工作。CSV中的值可能包含换行符,因此此方法无法可靠工作。我遇到的棘手问题是,我希望将第一行作为标题读取,然后将信息附加到每个标题,以获得更多的行。但是,与Excel中的显示方式相比,这些行的读取方式似乎有些偏差。我认为问题可能与它保存的格式有关。我有一个棘手的问题,就是我想把第一行读作标题,然后将信息附加到每个标题上,以获得更多的行。但是,与Excel中的显示方式相比,这些行的读取方式似乎有些偏差。我认为问题可能与它保存的格式有关。