T,T
源代码是这样的。
@$fp = fopen($_FILES["file"]["tmp_name"],"r");
if($fp){
while (!feof($fp)) {
$count++;
$output = fgets($fp, 1024);
$var = explode(",", $output);
}
奇怪的是,第一行的信息总是缺少的,
文件内容是:71222237, 计算机, JAVA数据库编程, 清华大学出版社, 2003, 孙林, 39, 7
然后读出来,$var[0] = 7122223
这是为什么呀
源代码是这样的。
@$fp = fopen($_FILES["file"]["tmp_name"],"r");
if($fp){
while (!feof($fp)) {
$count++;
$output = fgets($fp, 1024);
$var = explode(",", $output);
}
奇怪的是,第一行的信息总是缺少的,
文件内容是:71222237, 计算机, JAVA数据库编程, 清华大学出版社, 2003, 孙林, 39, 7
然后读出来,$var[0] = 7122223
这是为什么呀
if($fp){
while (!feof($fp)) {
$count++;
$output = fgets($fp, 1024);
echo base64_encode($output);
exit;
$var = explode(",", $output);
}代码中加入红色的那两句,执行后贴出结果
你说读出来有问题,我说这不个能,那么问题如何该解决呢?
显然你是不可能把数据文件给我测试的,所以我只要你给第一行数据测试一下
用 base64_encode 编码的原因是为了最大限度的保持数据的原貌
原始文件的第一行:
78221122, 计算机, JAVA数据库编程, 清华大学出版社, 2003, 孙林, 39, 7
$var = explode(",", $output);
print_r($var);78221122, 计算机, JAVA数据库编程, 清华大学出版社, 2003, 孙林, 39, 7
Array
(
[0] => 78221122
[1] => 计算机
[2] => JAVA数据库编程
[3] => 清华大学出版社
[4] => 2003
[5] => 孙林
[6] => 39
[7] => 7)
每次都这样。。后面的就是好好的。
代码
while (!feof($fp)) {
$count++;
$output = fgets($fp, 1024);
# echo base64_encode($output);
# exit;
# echo $output;
$var = explode(",", $output); #此处设置的为半角格式的",", 若有格式变化,需调整
print_r($var);
# print_r($var);
$book_no = trim($var[0]);
$category = trim($var[1]);
$title = trim($var[2]);
$press = trim($var[3]);
$pyear = trim($var[4]);
$author = trim($var[5]);
$price = trim($var[6]);
$total = trim($var[7]);
$sql = "insert into book values( \"$book_no\", \"$category\", \"$title\", \"$press\", $pyear, \"$author\", $price, $total, $total)";
$query = @ mysql_query($sql, $conn);
你的数据文件是 utf-8 的并且有 BOM 头
print_r(unpack('H*', $output));Array
(
[1] => efbbbf3738323231...
)你在处理第一行时把 BOM 同去掉试试
$var = explode(",", substr($output, 3));
!!就是这个问题!!
太感谢啦~~那个,想再小小问一下,为什么在数据库操作的时候要考虑BOM,而一般情况就不需要呢?