file_get_contents获取URL源码失败,代码报错求助(allow_fopen已开启)
你的代码:
$homepage = file_get_contents('https://www.google.com'); echo $homepage; $file = 'code.txt'; file_put_contents($file, $homepage);
报错信息:
PHP Warning: file_get_contents(https://www.google.com): Failed to open stream: No such file or directory in C:\Users\Steve\public_html\index.php on line 11
以下是几个实用的排查方向:
OpenSSL扩展未启用:file_get_contents访问HTTPS链接必须依赖OpenSSL扩展。打开php.ini文件,找到
extension=openssl,去掉前面的分号注释,重启Web服务器(如Apache、Nginx)后重试。DNS解析异常:本地DNS无法解析google.com域名,导致找不到目标服务器。打开命令提示符执行
ping google.com,查看是否能返回正常的IP和连通信息。如果不行,尝试将本地DNS改为8.8.8.8再测试。网络拦截限制:本地防火墙、杀毒软件或代理拦截了HTTPS请求。可以暂时关闭防火墙/杀毒软件,或检查代理设置是否正确。如果是公司内网,需联系管理员开放相关访问权限。
allow_url_fopen配置未实际生效:即便你确认开启了该配置,也可能修改了错误的php.ini文件(CLI和Web服务可能使用不同配置)。在代码中添加
var_dump(ini_get('allow_url_fopen'));,运行后查看输出是否为bool(true),确认配置是否真的生效。目标网站访问受限:国内网络环境下,google.com的IP可能被屏蔽。先测试访问其他HTTPS网站(如https://www.baidu.com),如果代码能正常获取源码,那就是谷歌的访问限制问题。
另外,推荐用cURL替代file_get_contents,它对HTTPS的支持更稳定,还能方便排查错误,示例代码:
$ch = curl_init('https://www.google.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 测试阶段可关闭证书验证,生产环境建议开启 $homepage = curl_exec($ch); if(curl_errno($ch)){ echo '请求错误:' . curl_error($ch); } curl_close($ch); echo $homepage; file_put_contents('code.txt', $homepage);
内容的提问来源于stack exchange,提问作者Steve

