问题:使用 phpMyAdmin Works 导入 csv,Php 脚本以不同方式处理 csv 导入
Posted
技术标签:
【中文标题】问题:使用 phpMyAdmin Works 导入 csv,Php 脚本以不同方式处理 csv 导入【英文标题】:Issue: Importing csv with phpMyAdmin Works, Php Script treats csv import differently 【发布时间】:2015-11-29 06:56:07 【问题描述】:我一直在使用这个我认为有点过时的脚本。我遇到的问题是,当我使用 phpMyAdmin 导入 csv 文件(6000 多条记录)时,它工作正常,但是,当我使用此 php 脚本导入相同的 csv 文件时,它会破坏字段顺序。
只导入前两条记录。导入的第二条记录没有正确导入为第二条记录的第一个字段,包含在第一条记录的最后一个字段中,因此导入过程似乎没有识别下一条记录的换行符。我尝试将 csv 文件保存为 utf8 以及 ascii。在这两种情况下都没有区别。
有什么想法可以修改脚本以像 phpMyAdmin 一样处理 csv 文件?
<?php
include "connect.php"; //Connect to Database
$deleterecords = "TRUNCATE TABLE plfwinvtable"; //empty the table of its current records
mysqli_query( $conn, $deleterecords );
//Upload File
if (isset($_POST['submit']))
if (is_uploaded_file($_FILES['filename']['tmp_name']))
echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>";
echo "<h2>Displaying contents:</h2>";
readfile($_FILES['filename']['tmp_name']);
//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
$import="INSERT into plfwinvtable(Barcode, Brand, Description, Category, Price, Size, Unit, ServeOz, NumDrinks, NameVar) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]')";
mysqli_query($conn, $import) or die(mysqli_error());
fclose($handle);
print "Import done";
//view upload form
else
print "Upload new csv by browsing to file and clicking on Upload<br />\n";
print "<form enctype='multipart/form-data' action='upload.php' method='post'>";
print "File name to import:<br />\n";
print "<input size='50' type='file' name='filename'><br />\n";
print "<input type='submit' name='submit' value='Upload'></form>";
?>
【问题讨论】:
Note: If PHP is not properly recognizing the line endings when reading files either on or created by a Macintosh computer, enabling the auto_detect_line_endings run-time configuration option may help resolve the problem.
马克我想你可能正在做一些事情,因为我正在使用旧的 Mac 和文件制作器来创建我的 csv 文件。我的客户有一个带 cpanel 的共享主机帐户。希望我可以在服务器上更改此设置。
您应该能够使用 ini_set() 在代码中动态更改 auto_detect_line_endings
设置
我正在寻找如何在 php 脚本中执行此操作的示例。您将如何执行此操作以及在脚本中的何处添加此内容。
ini_set ('auto_detect_line_endings', true)
。 PHP docs其实在笔记中以此为例
【参考方案1】:
将文件另存为upload.php
<html>
<head>
<style type="text/css">
body
background: #E3F4FC;
font: normal 14px/30px Helvetica, Arial, sans-serif;
color: #2b2b2b;
a
color:#898989;
font-size:14px;
font-weight:bold;
text-decoration:none;
a:hover
color:#CC0033;
h1
font: bold 14px Helvetica, Arial, sans-serif;
color: #CC0033;
h2
font: bold 14px Helvetica, Arial, sans-serif;
color: #898989;
#container
background: #CCC;
margin: 100px auto;
width: 945px;
#form padding: 20px 150px;
#form input margin-bottom: 20px;
</style>
</head>
<body>
<div id="container">
<div id="form">
<?php
include "inc/database.php"; //Connect to Database
//Upload File
if (isset($_POST['submit']))
if (is_uploaded_file($_FILES['filename']['tmp_name']))
echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>";
echo "<h2>Displaying contents:</h2>";
readfile($_FILES['filename']['tmp_name']);
//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
$import="INSERT into awards (field1, field2, field3, field4) values('$data[0]','$data[1]','$data[2]','$data[3]')";
mysql_query($import) or die(mysql_error());
fclose($handle);
print "Import done";
//view upload form
else
print "Upload new csv by browsing to file and clicking on Upload<br />\n";
print "<form enctype='multipart/form-data' action='upload.php' method='post'>";
print "File name to import:<br />\n";
print "<input size='50' type='file' name='filename'><br />\n";
print "<input type='submit' name='submit' value='Upload'></form>";
?>
</div>
</div>
</body>
</html>
将工作 100%... :)
【讨论】:
您现在面临什么问题?我的工作正常。 我正在使用 mysqli 连接。 如上所述,脚本不会将我的 csv 文件视为与 phpMyAdmin 上传相同,我使用它作为我的 csv 数据文件格式正确的衡量标准。 使用 mysqli 连接不是问题。我还加了截图回答 见上面的标记评论。我认为这是我的 csv 文件的问题。我要试一试,让你知道。感谢您的时间。以上是关于问题:使用 phpMyAdmin Works 导入 csv,Php 脚本以不同方式处理 csv 导入的主要内容,如果未能解决你的问题,请参考以下文章