PHP 提供了三种原生函数用于本地文件操作:file()
、file_get_contents()
和 fopen()
。虽然围绕这些函数构建了完整的库,但它们仍然是快速操作 PHP 文件的首选方法。
我们将首先了解这些函数的功能,然后查看它们的工作示例。
file()
和 file_get_contents()
file()
和 file_get_contents()
的工作方式非常相似。它们都读取整个文件。但是,file()
将文件读取到数组中,而 file_get_contents()
将文件读取到字符串中。这两个函数都是二进制安全的,这意味着它们可以用于任何类型的文件内容。
使用 file()
时要格外小心,因为它返回的数组将以换行符分隔,但每个元素仍然会附加终止换行符。
fopen()
fopen()
函数的工作方式完全不同。它将打开一个文件描述符,该描述符充当读取或写入文件的流。
PHP 手册是这样解释的:
最简单的形式,流是一个表现出可流行为的资源对象。也就是说,可以以线性方式从中读取或写入,并且可能能够使用
fseek()
跳转到流中的任意位置。
简单来说,调用 fopen()
不会做任何事情,只会打开一个流。
打开流并拥有文件句柄后,可以使用 fread()
和 fwrite()
等其他函数来操作文件。完成后,可以使用 fclose()
关闭流。
查看以下示例:
<code class="language-php"><?php $filepath = "/usr/local/sitepoint.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle);</code>
上述函数将为您提供对文件的更精细控制,但它们的级别远低于 file()
或 file_get_contents()
函数,正如 PHP 文档中所述,后者更可取:
file_get_contents()
是将文件内容读取到字符串的首选方法。如果您的操作系统支持,它将使用内存交换技术来提高性能。
file_get_contents()
使用起来相当简单:
<code class="language-php"><?php $file_contents = file_get_contents('./file.txt');</code>
这会将 file.txt
的内容读取到 $file_contents
中。
如果我们只需要文件的一部分,我们可以这样做:
<code class="language-php"><?php $file_contents = file_get_contents('./file.txt', FALSE, NULL, 20, 14);</code>
这将读取 file.txt
从第 20 个字符开始的 14 个字符。有关 file_get_contents()
所有参数的更多信息,请参阅官方文档。
file_get_contents()
和 fopen()
在 PHP 中有什么区别?file_get_contents()
和 fopen()
都用于在 PHP 中读取文件,但它们的工作方式略有不同。file_get_contents()
将文件读取到字符串中,将整个文件作为单个字符串返回。此函数简单易用,但不适用于大型文件,因为它可能会消耗大量内存。另一方面,fopen()
打开文件或 URL 并返回一个资源,该资源可与其他与文件相关的函数(例如 fgets()
或 fwrite()
)一起使用。此函数对于大型文件更灵活且更高效,因为它逐行读取文件。
PHP 提供了几种方法来处理读取文件时的错误。一种常见的方法是在函数之前使用“@”运算符来抑制错误消息。另一种方法是使用 file_exists()
函数在尝试读取文件之前检查文件是否存在。您还可以使用 is_readable()
函数来检查文件是否可读。如果发生错误,这些函数将返回 false,允许您优雅地处理错误。
是的,PHP 允许您使用 file_get_contents()
或 fopen()
函数(使用 URL 而不是本地文件路径)从远程服务器读取文件。但是,出于安全原因,此功能在某些服务器上可能被禁用。您可以通过查看 php.ini
文件中的 allow_url_fopen
设置来检查它是否已启用。
PHP 没有提供内置函数来读取文件的特定行,但您可以通过使用 file()
函数将文件读取到数组中来实现此目的,然后按其索引访问所需的线。请记住,索引从 0 开始,因此第一行位于索引 0,第二行位于索引 1,依此类推。
要在 PHP 中以二进制模式读取文件,您可以使用带有“b”标志的 fopen()
函数。这对于读取二进制文件(例如图像或可执行文件)特别有用。打开文件后,您可以使用 fread()
函数读取它,该函数将数据作为二进制字符串返回。
PHP 提供了 fgetcsv()
函数来读取 CSV 文件。此函数解析其读取的行的 CSV 格式字段,并返回一个包含读取的字段的数组。您可以将此函数用于循环以读取整个 CSV 文件。
PHP 没有提供内置函数来反向读取文件,但您可以通过使用 file()
函数将文件读取到数组中来实现此目的,然后使用 array_reverse()
函数反转数组。
默认情况下,PHP 在读取文件时不会锁定文件。但是,如果您需要确保文件未被锁定,则可以在读取文件之前使用带有 LOCK_SH
标志的 flock()
函数。此函数将尝试获取共享锁,允许其他进程同时读取文件。
要在 PHP 中高效地读取大型文件,您可以使用 fopen()
函数打开文件,然后使用循环中的 fgets()
函数逐行读取文件。此方法比将整个文件读取到字符串或数组中更节省内存,因为它只将当前行保存在内存中。
要在 PHP 中读取文件并将内容输出到浏览器,您可以使用 readfile()
函数。此函数读取文件并将其写入输出缓冲区,然后将其发送到浏览器。这是一种方便地向用户提供文件(例如图像或可下载文件)的方法。
以上是快速提示:如何读取PHP的本地文件的详细内容。更多信息请关注PHP中文网其他相关文章!