并且您将获得以下输出:
清单6:输出
        
        
        
        
Array
(
[personal information] => Array
(
[name] => King Arthur
[quest] => To seek the Holy Grail
[favorite color] => Blue
)
[more stuff] => Array
(
[Samuel Clemens] => Mark Twain
[Caryn Johnson] => Whoopi Goldberg
)
)
PHP 将把数据放入可以轻松解析的多维数组中。
对于 PHP 文件处理来说,这只是冰山一角。诸如 tidy_parse_file 和 xml_parse 之类的更复杂的函数可以分别帮助您处理 HTML 和 XML 文档。有关这些特殊函数的使用细节,请参阅 参考资料。如果您要处理那些类型的文件,则那些参考资料值得一看,但不必过度考虑本文中谈到的每种可能遇到的文件类型,下面是一些用于处理到目前为止介绍的函数的很好的通用规则。
最佳实践
绝不要假定程序中的一切都将按计划运行。例如,如果您要查找的文件已被移动该当如何?如果权限已被改变而无法读取其内容又当如何?您可以通过使用 file_exists 和 is_readable 预先检查这些问题。
清单7:使用 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,这将确保仅当文件成功打开后才执行文件处理。当然,如果文件不存在或者不可读,您可以期望一个负返回值。这将使这个检查可以检查所有可能遇到的问题。此外,如果打开失败,可以退出程序或让程序显示错误消息。
如 fopen 函数一样,file_get_contents、file 和 readfile 函数都在打开失败或处理文件失败时返回 False。fgets、fgetss、fread、fscanf 和 fclose 函数在出错时也返回 False。当然,除 fclose 以外,您可能已经对这些函数的返回值都进行了处理。使用 fclose 时,即使文件处理未正常关闭,也不会执行什么操作,因此通常不必检查 fclose 的返回值。
由您来选择
PHP 不缺读取和解析文件的有效方法。诸如 fread 之类的典型函数可能在大多数时候都是最佳的选择,或者当 readfile 刚好能满足任务需要时,您可能会发现自己更为 readfile 的简单所吸引。它实际上取决于所要完成的操作。
如果要处理大量数据,fscanf 将能证明自己的价值并比使用 file 附带 split 和 sprintf 命令更有效率。相反,如果要回显只做了少许修改的大量文本,则使用 file、file_get_contents 或 readfile 可能更合适。使用 PHP 进行缓存或者创建权宜的代理服务器时可能就属于这种情况。
PHP 给您提供了大量处理文件的工具。深入了解这些工具并了解哪些工具最适合于要处理的项目。您已拥有很多的选择,因此好好地利用它们享受使用 PHP 处理文件的乐趣。