龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

用PHP读取文件的正确方法(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
假定文件大小不超过 8 KB,则以下代码应当能将整个文件读入一个字符串。 $fh = fopen("myfile", "rb"); $data = fread($fh, filesize("myfile")); fclose($fh); 如果文件长度大

假定文件大小不超过 8 KB,则以下代码应当能将整个文件读入一个字符串。

$fh = fopen("myfile", "rb");
$data = fread($fh, filesize("myfile"));
fclose($fh);

如果文件长度大于此值,则只能使用循环将其余内容读入。

备注:使用二进制数据

注意:此函数的示例已经使用了略微不同于 fopen 的参数。当处理二进制数据时,始终要记得将 b 选项包含在 fopen 中。如果跳过这一点,Microsoft® Windows® 系统可能无法正确处理文件,因为它们将以不同的方式处理新行。如果处理的是 Linux® 系统(或其他某个 UNIX® 变种),则这可能看似没什么关系。但即使不是针对 Windows 开发的,这样做也将获得良好的跨平台可维护性,并且也是应当遵循的一个好习惯。

fscanf

回到字符串处理,fscanf 同样遵循传统的 C 文件库函数。如果您不熟悉它,则 fscanf 将把字段数据从文件读入变量中。

list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

此函数使用的格式字符串在很多地方都有描述(如 PHP.net 中),故在此不再赘述。可以这样说,字符串格式化极为灵活。值得注意的是所有字段都放在函数的返回值中。(在 C 中,它们都被作为参数传递。)

fgetss

fgetss 函数不同于传统文件函数并使您能更好地了解 PHP 的力量。该函数的功能类似于 fgets 函数,但将去掉发现的任何 HTML 或 PHP 标记,只留下纯文本。查看如下所示的 HTML 文件。

清单2:样例 HTML 文件




If you understand what "Cause there ain't no one for to give you no pain"
means then you listen to too much of the band America



    
然后通过 fgetss 函数过滤它。

清单3:使用 fgetss

$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
echo = fgetss($file_handle);
}
fclose($file_handle);

以下是输出:

My title

If you understand what "Cause there ain't no one for to give you no pain"
means then you listen to too much of the band America

fpassthru 函数

无论怎样读取文件,您都可以使用 fpassthru 将其余数据转储到标准输出通道。

fpassthru($fh);

此外,此函数将打印数据,因此无需使用变量获取数据。

非线性文件处理:跳跃访问

当然,以上函数只允许顺序读取文件。更复杂的文件可能要求您来回跳转到文件的不同部分。这时就用得着 fseek 了。

fseek($fh, 0);

以上示例将跳转回文件的开头。如果不需要完全返回 ―― 我们可设定返回千字节 ―― 然后就可以这样写:

fseek($fh, 1024);

从 PHP V4.0 开始,您有一些其他选项。例如,如果需要从当前位置向前跳转 100 个字节,则可以尝试使用:

fseek($fh, 100, SEEK_CUR);

类似地,可以使用以下代码向后跳转 100 个字节:

fseek($fh, -100, SEEK_CUR);

如果需要向后跳转至文件末尾前 100 个字节处,则应使用 SEEK_END。

fseek($fh, -100, SEEK_END);

在到达新位置后,可以使用 fgets、fscanf 或任何其他方法读取数据。

注:不能将 fseek 用于引用 URL 的文件处理。

精彩图集

赞助商链接