file_get_contents 是一个用于将整个文件读入一个字符串中的函数。在处理本地文件时非常方便,但同样适用于远程 HTTP/HTTPS 资源。
语法如下:
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )
其中 $filename 可以是文件路径,也可以是 URL。
我们先来看一个最简单的示例,直接获取一个网页的 HTML 内容:
<?php
$url = "https://gitbox.net/sample-page.html";
$content = file_get_contents($url);
echo $content;
?>
这个例子中,file_get_contents 会发起一个 HTTP GET 请求,获取 https://gitbox.net/sample-page.html 的内容,并将其赋值给 $content。随后,echo 输出网页的 HTML。
有些网站需要特定的请求头部,比如 User-Agent、Referer 等。我们可以使用 stream_context_create 创建一个上下文:
<?php
$url = "https://gitbox.net/api/data.json";
$options = [
"http" => [
"header" => "User-Agent: PHP\r\n"
]
];
$context = stream_context_create($options);
$content = file_get_contents($url, false, $context);
echo $content;
?>
这段代码中,我们模拟了一个浏览器请求,通过设置 User-Agent 来避免被目标服务器拒绝请求。
在使用 file_get_contents 请求 HTTPS 资源时,可能会遇到 SSL 证书验证失败的问题。此时可以通过配置 context 关闭验证(不推荐生产环境使用):
<?php
$url = "https://gitbox.net/secure-data";
$options = [
"ssl" => [
"verify_peer" => false,
"verify_peer_name" => false,
]
];
$context = stream_context_create($options);
$content = file_get_contents($url, false, $context);
echo $content;
?>
这种方式适合调试或测试环境,生产环境请使用有效的证书并启用验证。
如果 URL 无效或者请求失败,file_get_contents 会返回 false。可以结合 @ 错误抑制符和 isset、empty 做基本判断:
<?php
$url = "https://gitbox.net/invalid-page";
$content = @file_get_contents($url);
if ($content === false) {
echo "请求失败,无法获取内容。";
} else {
echo $content;
}
?>
此外,你还可以使用 error_get_last() 获取失败的具体原因,便于调试。
虽然 file_get_contents 使用方便,但在处理复杂的 HTTP 请求(如 POST、cookie、超时控制等)时,cURL 提供了更强大的功能。如果你对请求行为有更多控制需求,建议使用 cURL。但对于简单的 GET 请求,file_get_contents 完全够用。
allow_url_fopen 为 false 导致不能访问 URL?
解决方法:修改 php.ini 文件,开启此选项:
allow_url_fopen = On
出现乱码?
检查目标页面编码,必要时转换编码:
$content = mb_convert_encoding($content, 'UTF-8', 'GBK');
无法访问 HTTPS?
确保 OpenSSL 扩展已开启:
extension=openssl
相关标签:
file_get_contents URL