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