01.06
为了提高程序的性能。我把经常用到数据做了个缓存,也就是把数据按照一定的格式生成一个文件。下次访问的时候。如果有缓存就读取这个文件,不在去从数据库里去了。减少数据库的压力。在给数据做分页的时候用到了读取文件的函数,fgets ,fread.
下面来介绍一下这两个函数的区别。
fgets –
string fgets ( int handle [, int length] )
从 handle 指向的文件中读取一行并返回长度最多为 length – 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length – 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
出错时返回 FALSE。
fread –
string fread ( int handle, int length )
fread() 从文件指针 handle 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。
返回所读取的字符串,如果出错返回 FALSE。
以上是手册里对连个函数的定义,意思都是从文件指针 handle 读取最多 length 个字节。但是fgets 是文件一行length 个字节。fread 是读取这个文件,从文件指针 handle 读取最多 length 个字节.
例如:
建个文本文件’test.txt.
内容是
1 2 | scxvxcv 13423423 |
用fgets 的程序
1 2 3 4 5 6 7 8 9 10 11 12 | < ?php
$handle = fopen('test.txt', "r");
$contents = '';
if ($handle) {
while (!feof($handle)) {
$contents = fgets($handle, 10);
echo $contents;
exit;
}
fclose($handle);
}
?> |
输出结果:
1 | scxvxcv |
用fread 的程序
1 2 3 4 5 6 7 8 9 10 11 12 | < ?php
$handle = fopen('test.txt', "r");
$contents = '';
if ($handle) {
while (!feof($handle)) {
$contents .= fread($handle, 10);
echo $contents;
exit;
}
fclose($handle);
}
?> |
输出的结构是 :
1 2 | scxvxcv 12 |
总结:
1, fgets是一次读一行 碰到\n就结束。
2, fread是读整个文档 然后抓要读取的字节 ,在文档中\n算一个字节所以结果应该是 scxvxcv\n12.
暂无回复
添加回复