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
常量来触发 include path 搜索。如果启用了 严格类型,则这是不可能的,因为 FILE_USE_INCLUDE_PATH
是一个 int。请改用 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:致命协议错误”。要解决此问题,应将 error_reporting 的值降低到不包含警告的级别。当您使用 https://
包装器打开流时,PHP 可以检测到有问题的 IIS 服务器软件,并将抑制警告。当使用 fsockopen() 创建 ssl://
套接字时,开发者有责任检测和抑制此警告。