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
这是为什么呀

解决方案 »

  1.   

    完整的var 是什么情况?var_dump
      

  2.   

    @$fp = fopen($_FILES["file"]["tmp_name"],"r");
    if($fp){
      while (!feof($fp)) {
    $count++;
    $output = fgets($fp, 1024);
    echo base64_encode($output);
    exit;
    $var = explode(",", $output);

    }代码中加入红色的那两句,执行后贴出结果
      

  3.   

    我并没有说存在什么问题
    你说读出来有问题,我说这不个能,那么问题如何该解决呢?
    显然你是不可能把数据文件给我测试的,所以我只要你给第一行数据测试一下
    用 base64_encode 编码的原因是为了最大限度的保持数据的原貌
      

  4.   

    77u/NzgyMjExMjIsIOiuoeeul+acuiwgSkFWQeaVsOaNruW6k+e8lueoiywg5riF5Y2O5aSn5a2m5Ye654mI56S+LCAyMDAzLCDlrZnmnpcsIDM5LCA3DQo=额,好的嘛,我错了不要那么凶嘛。。
      

  5.   


    原始文件的第一行:
    78221122, 计算机, JAVA数据库编程, 清华大学出版社, 2003, 孙林, 39, 7
      

  6.   

    好吧,你看看是为什么echo $output = base64_decode("77u/NzgyMjExMjIsIOiuoeeul+acuiwgSkFWQeaVsOaNruW6k+e8lueoiywg5riF5Y2O5aSn5a2m5Ye654mI56S+LCAyMDAzLCDlrZnmnpcsIDM5LCA3DQo=");
    $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)
      

  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);
      

  8.   

    那就要考虑 BOM 了
    你的数据文件是 utf-8 的并且有 BOM 头
    print_r(unpack('H*', $output));Array
    (
        [1] => efbbbf3738323231...
    )你在处理第一行时把 BOM 同去掉试试
    $var = explode(",", substr($output, 3));
      

  9.   


    !!就是这个问题!!
    太感谢啦~~那个,想再小小问一下,为什么在数据库操作的时候要考虑BOM,而一般情况就不需要呢?
      

  10.   

    BOM 头不在所指示的字符集中,对于字符集而言属于非法字符,当然要影响正常的数据啦比如用 iconv 在做编码转换时,遇到非法字符时不是就截断了吗?