file_get_contents
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
file_get_contents — 将整个文件读入字符串
说明
file_get_contents() 是将文件内容读入字符串的首选方式。如果您的操作系统支持,它将使用内存映射技术来提高性能。
注意:
如果您要打开包含特殊字符(例如空格)的 URI,则需要使用 urlencode() 对 URI 进行编码。
参数
filename
-
要读取的文件的名称。
use_include_path
-
注意:
FILE_USE_INCLUDE_PATH
常量可用于触发 包含路径 搜索。如果启用了 严格类型,则无法执行此操作,因为 FILE_USE_INCLUDE_PATH
是一个 整数。请改用 true
。
context
-
使用 stream_context_create() 创建的有效上下文资源。如果您不需要使用自定义上下文,则可以使用 null
跳过此参数。
offset
-
在原始流上开始读取的偏移量。负偏移量从流的末尾开始计数。
远程文件不支持寻址(offset
)。尝试对非本地文件进行寻址可能在小偏移量的情况下有效,但这不可预测,因为它是在缓冲流上进行的。
length
-
读取数据的最大长度。默认情况下读取到文件末尾。请注意,此参数适用于经过过滤器处理的流。
返回值
该函数返回读取的数据或失败时返回 false
。
错误/异常
如果找不到 filename
,length
小于零,或者在流中寻求指定的 offset
失败,则会生成 E_WARNING
级别的错误。
当 file_get_contents() 在目录上调用时,在 Windows 上会生成 E_WARNING
级别的错误,从 PHP 7.4 开始,在其他操作系统上也会生成此错误。
示例
示例 #1 获取并输出网站主页面的源代码
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
示例 #2 在 include_path 中搜索
<?php
// 如果启用了严格类型,例如 declare(strict_types=1);
$file = file_get_contents('./people.txt', true);
// 否则
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);
?>
示例 #3 读取文件的一部分
<?php
// 从第 21 个字符开始读取 14 个字符
$section = file_get_contents('./people.txt', FALSE, NULL, 20, 14);
var_dump($section);
?>
string(14) "lle Bjori Ro"
示例 #4 使用流上下文
<?php
// 创建一个流
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
// 使用上面设置的 HTTP 标头打开文件
$file = file_get_contents('http://www.example.com/', false, $context);
?>
注释
注意: 此函数是二进制安全的。
警告当使用 SSL 时,Microsoft IIS 会违反协议,在没有发送 close_notify
指示的情况下关闭连接。PHP 在您到达数据末尾时会将其报告为“SSL: Fatal Protocol Error”。为了解决这个问题,error_reporting 的值应该降低到不包含警告的级别。当您使用 https://
包装器打开流时,PHP 可以检测到有问题的 IIS 服务器软件,并且会抑制警告。当使用 fsockopen() 创建 ssl://
套接字时,开发人员负责检测和抑制此警告。