php的fgets读取空行用list处理空行时导致undefined offset。

在使用PHP的fgets函数读取文件时遇到一个问题,当遇到空行时,通过list处理会导致'undefined offset'错误。博主SanZhiYuan在2009年8月7日的文章中探讨了这一现象,文章主要关注PHP读取文件时如何正确处理空行的情况。
摘要由CSDN通过智能技术生成

为什么最后会多输出一行

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
7
Ada Lovelace
7
Adele Goldberg
7
Alan Turing
7
Anakin Skywalker
7
Angry Video Game Nerd
7
Anita Borg
7
Barbara Liskov
7
Bill Gates
7
Bill Joy
7
Bjarne Stroustroup
7
Buffy Summers
7
Charles Babbage
7
Dana Scully
7
Deanna Troi
7
Donald Knuth
7
Edsger Dijkstra
7
Ellen Ripley
7
Frances Allen
7
Gordon Moore
7
Grace Hopper
7
Jadzia Dax
7
James Gosling
7
Jeannette Wing
7
Kathryn Janeway
7
Lara Croft
7
Leeloo
7
Leia Organa
7
Lenore Blum
7
Marissa Mayer
7
Marty Stepp
7
Mary Lou Jepsen
7
Ms Frizzle
7
Natalie Portman
7
Niklaus Wirth
7
Nostalgia Critic
7
Nyota Uhura
7
Oldspice Guy
7
Rasmus Lerdorf
7
Richard Stallman
7
River Tam
7
Roberta Williams
7
Rosie O Donnell
7
Sarah Connor
7
Seven of Nine
7
Stewie Griffin
7
Stuart Reges
7
Tpol
7
Trinity
7
Tyler Durden
7
Valentina Tereshkova
7
Vint Cerf
7
Yukihiro Matsumoto
1

End of file

Notice : Undefined offset: 6 in  D:/Program Files/EasyPHP-5.3.6.0/www/hw4/matches.php   on line  75

Notice : Undefined offset: 5 in  D:/Program Files/EasyPHP-5.3.6.0/www/hw4/matches.php   on line  75

Notice : Undefined offset: 4 in  D:/Program Files/EasyPHP-5.3.6.0/www/hw4/matches.php   on line  75

Notice : Undefined offset: 3 in  D:/Program Files/EasyPHP-5.3.6.0/www/hw4/matches.php   on line  75

Notice : Undefined offset: 2 in  D:/Program Files/EasyPHP-5.3.6.0/www/hw4/matches.php   on line  75

Notice : Undefined offset: 1 in  D:/Program Files/EasyPHP-5.3.6.0/www/hw4/matches.php   on line  75
53 Array ( [0] => Angry Video Game Nerd [1] => M [2] => 29 [3] => ISTJ [4] => Mac OS X [5] => 1 [6] => 99 )

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

红色部分的代码是,在while循环读文件前声明一个$countl = 0;在循环中countl++;
在while循环之后
echo $countl;出来的,
而文件一共52行。

-----
多读出来一行,在while循环中对行处理时,最后会出问题,例如装载到list() = $array。时,第53行-空行,会出现 undefined lines。
----

搜索到,

================================================================================

SanZhiYuan   发表于 2009-08-07 10:19

那个是文件结束符eof吧

网鬼   发表于 2009-08-07 22:47

可能是txt的结尾有空行,但fgets还是会读取到,这样,最后一条记录的三个值其实都是空值,FirstName, LastName应该是字符型,所以是空值,而Age的类型你应该是整型的,所以Mysql自动将空值转为0
这也是由于你代码写得不够严谨造成的
首先$rawLine = fgets($fileHandle, 4096);可以写为
$rawLine = trim(fgets($fileHandle, 4096));
fgets读取的一行中是包括最后的换行符的
$columns = preg_split("//s+/", $rawLine);
应该是插入数据库之前判断一下$columns不能是空值或是使用preg_split中可能出现错误,从而保证插入数据库的数据的正确性
if($columns) {
    //mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$columns[0]', '$columns[1]', '$columns[2]')");
}


================================================================================

问题解决,在list前面加了一句判断:



终于解决了读文件多读一个空行,然后不加判断存入list() = $array中,导致undefined offset的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值