09-26 php读取文件的正确方法

了解使用 fopen、fclose、feof、fgets、fgetss 和 fscanf

 

1.传统的 fopen 方法

 用 fgets 打开并读取文件

  $file_handle = fopen("myfile", "r"); //打开文件。$file_handle 存储了一个对文件本身的引用。 

  while (!feof($file_handle)) { // 检查是否已到达文件的末尾。

  $line = fgets($file_handle);  //继续读取文件,直至到达文件末尾,边读取边打印每行

  echo $line; }

fclose($file_handle);//关闭文件;

 

2.fopen

fopen 函数将创建与文件的连接。我之所以说“创建连接”,是因为除了打开文件之外,fopen 还可以打开一个 URL:

$fh = fopen("http://127.0.0.1/", "r");
//创建一个与以上页面的连接,并允许您开始像读取一个本地文件一样读取(只读)它。

 

3.feof

feof 命令将检测您是否已经读到文件的末尾并返回 True 或 False。清单 1 中的循环将继续执行,直至您达到文件“myfile”的末尾。注:如果读取的是 URL 并且套接字由于不再有任何数据可以读取而超时,则 feof 也将返回 False。

 

4.fclose

向前跳至清单 1 的末尾,fclose 将实现与 fopen 相反的功能:它将关闭指向文件或 URL 的连接。执行此函数后,您将不再能够从文件或套接字中读取任何信息。

 

5.fgets

fgets函数将从文件中提取一行数据并将其作为字符串返回。在那之后,您可以打印或者以别的方式处理数据。清单 1 中的示例将精细地打印整个文件。

如果决定限制处理数据块的大小,您可以将一个参数添加到 fgets 中限制最大行长度。例如,使用以下代码将行长度限制为 80 个字符:

$string = fgets($file_handle, 81);

 

6.fread

fread() 函数读取文件(可安全用于二进制文件)。

语法:fread(file,length)。 fread() 从文件指针 file 读取最多 length 个字节。

返回所读取的字符串,如果出错返回 false。

fread 函数与 fgets 的处理目标略有不同:它趋于从二进制文件(即,并非主要包含人类可阅读的文本的文件)中读取信息。由于“行”的概念与二进制文件无关(逻辑数据结构通常都不是由新行终止),因此您必须指定需要读入的字节数。

$fh = fopen("myfile", "rb");
$data = fread($file_handle, 4096)  ;  // 读取 4,096 字节 (4 KB) 的数据。

注:不管指定多少字节,fread 都不会读取超过 8,192 个字节 (8 KB)。如果文件长度大于此值,则只能使用循环将其余内容读入。

提示:如果只是想将一个文件的内容读入到一个字符串中,请使用 file_get_contents(),它的性能比 fread() 好得多。

 

7.fscanf

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

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

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

8.fgetss

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

 

 

 

9.file_existsis_readable

$filename = "myfile";
if (file_exists($filename) && is_readable ($filename)) {
$fh = fopen($filename, "r");
# Processing
fclose($fh);
}

在实践中,用这样的代码可能太繁琐了。处理 fopen 的返回值更简单并且更准确。

if ($fh = fopen($filename, "r")) {
# Processing
fclose($fh);
}

由于失败时 fopen 将返回 False,这将确保仅当文件成功打开后才执行文件处理。当然,如果文件不存在或者不可读,您可以期望一个负返回值。这将使这个检查可以检查所有可能遇到的问题。此外,如果打开失败,可以退出程序或让程序显示错误消息。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-09-26 17:31  hlp鹏  阅读(167)  评论(0编辑  收藏  举报