PHP使用file_get_contents获取无文件名站点资源返回空白怎么办
问题原因
file_get_contents默认发起请求时未携带任何浏览器标识、来源页等请求头信息,大部分站点会做UA、Referer、Cookie校验,不符合要求的请求会直接被拦截,无有效响应内容返回- PHP配置项
allow_url_fopen被关闭,无法通过file_get_contents发起远程HTTP/HTTPS资源请求 - 目标站点返回301/302重定向,
file_get_contents默认不跟随重定向,仅拿到空的重定向响应体 - 请求HTTPS资源时PHP默认会校验站点证书有效性,目标站点证书不被当前环境信任时,请求会被中断返回空内容
排查&解决方法
首先在代码开头添加错误提示配置,直接输出具体错误信息定位根因,同时补全请求上下文参数适配站点校验规则,参考代码如下:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); $datalink = 'https://www.gymtranet.dk/discipliner/idraetsgymnastik/deltagere/downloadkigindv/?Num=1801'; // 构造请求上下文,补全请求参数 $context = stream_context_create([ 'http' => [ 'method' => 'GET', 'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\r\nReferer: https://www.gymtranet.dk/\r\n", 'follow_location' => 1, 'timeout' => 20 ], 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false ] ]); $data = file_get_contents($datalink, false, $context); echo $data; ?>
如果确认是allow_url_fopen配置关闭导致的问题,修改php.ini开启该配置项,或者换用curl扩展发起请求即可。
内容的提问来源于stack exchange,提问作者JorgenBB
相关产品推荐
相关产品推荐

