2010
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.

暂无回复

添加回复