本文实例讲述了PHP中的feof()函数的用法,针对feof()函数进行了一定的测试,很有实用价值。具体分析如下:
本文实例运行环境:
OS:Mac OS X 10.8.4
PHP:5.3.15
在PHP的官方手册中,函数feof()下面的讨论不少,对此做了一些相关的测试如下。
测试代码如下:
<"Content-Type" content="text/html; charset=UTF-8">
<title>测试PHP中的feof()函数效果</title>
</head>
<body>
<div>
EOF;
function bool2str($bool) {
if ($bool == TRUE) {
return "TRUE";
} else {
return "FALSE";
}
}
/*
* 请随便创建一个文件。
* 比如:本测试中,在脚本文件的相同路径下创建了一个文本文件,
* 文件内容为“abcdefg”,文件名为“7bytesfile”。
*/
$filename = './7bytesfile';
$handle = fopen($filename, 'r');
if (!$handle) {
die("文件打开失败");
}
for($i = 0; $i <= filesize($filename); $i++) {
fseek($handle, $i);
echo "文件位置" . ftell($handle) . ":<br />\n";
echo "执行fseek,尚未执行读取操作之前,feof结果:" . bool2str(feof($handle)) . "<br />\n";
echo "当前位置字符:" . fgetc($handle) . "<br />\n";
echo "执行文件读取操作之后,feof结果:" . bool2str(feof($handle)) . "<hr />\n";
}
/*
* 通过上面一段代码可以观察到,
* 随着循环的执行,文件指针从文件头一直移动到文件末尾。
* 但是当完成了字符“g”的读取输出,文件指针继续向后移动,这是feof()依然返回False。
* 只有当执行了一次fgetc()操作之后,才返回true,表示到达文件末尾。
*/
echo "ftell()结果:". ftell($handle). "<hr />\n";
//输出一下,很郁闷的发现文件指针的位置还是7。+_+
fseek($handle, 4);
echo "文件位置" . ftell($handle) . ":<br />\n";
echo "执行fseek,尚未执行读取操作之前,feof结果:" . bool2str(feof($handle)) . "<br />\n";
echo "当前位置字符:" . fgetc($handle) . "<br />\n";
echo "执行文件读取操作之后,feof结果:" . bool2str(feof($handle)) . "<hr />\n";
fseek($handle, 7);
echo "文件位置" . ftell($handle) . ":<br />\n";
echo "执行fseek,尚未执行读取操作之前,feof结果:" . bool2str(feof($handle)) . "<br />\n";
echo "当前位置字符:" . fgetc($handle) . "<br />\n";
echo "执行文件读取操作之后,feof结果:" . bool2str(feof($handle)) . "<hr />\n";
fclose($handle);
//再次移动文件指针,效果依旧。
//再用另外一段代码测试一下:
$handle = fopen($filename, 'r');
if (!$handle) {
die("文件打开失败");
}
while (!feof($handle)) {
$char = fgetc($handle);
if ($char === FALSE) {
echo 'FALSE';
} else {
echo $char;
}
}
fclose($handle);
//依然是输出了字符g之后,再次执行读取操作,才终止循环。
print <<<EOF
</div>
</body>
</html>
EOF;
"color: #0000ff">一个方法是不做feof()检测,直接检测内容读取函数(比如fgetc()、fgets())的执行结果。
示例代码如下:
while (($content = fgets($fileHandle)) !==FALSE) {
//文件内容处理……
}
这种处理办法,利用了PHP被诟病的函数返回方式,所以得用“===”或“!==”进行检测,不能把代码简化成:
while ($content = fgets($fileHandle)) {}
另外一个方法是先进行一次文件读取,然后再进入feof()循环,如下所示:
$content = fgets($fileHandle);
while (!feof($fileHandle)) {
//处理文件内容……
$content = fgets($fileHandle);
}
经过测试,前一种方法效率会高一些。
希望本文示例对大家PHP程序设计有所帮助。
标签:
PHP,feof()函数
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“PHP中feof()函数实例测试”评论...
更新日志
2025年11月12日
2025年11月12日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]