php file_get_contents(url)在本地测试可以获取到远程url的内容,但上传至服务器后返回的确实空的值

php file_get_contents(url)在本地测试可以获取到远程url的内容,但上传至服务器后返回的确实空的值,第1张

想获取远程url的东西需要先判断

function get_url_contents($url)

{

//先判断allow_url_fopen是否打开,如果打开则用file_get_contents获取,如果没打开用curl_init获取

if (ini_get("allow_url_fopen") == "1")

return file_get_contents($url);

$ch = curl_init();

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);

curl_close($ch);

return $result;

}

因为,PHP CURL库默认1024字节的长度不等待数据的返回,所以你那段代码需增加一项配置:

curl_setopt($ch, CURLOPT_>

最近在做服务器迁移, 之前是直接使用阿里云的slb 随着业务的发展以及稳定性要求, 决定对服务器进行升级, 同时对业务进行拆分, 经过多种考虑最后使用slb+nginx路由方案

前端使用slb的tcp监听, 开启会话保持 ecs上配置nginx进行二次转发

浏览器访问一切正常, 也没有用户报任何使用问题

就这样无风无雨的过了一天, 第二天业务人员报微信支付数据异常, 转账成功, 转账标识显示失败

开发人员开始进行排查, 发现服务器可以正常接收微信回调, 不过服务器间调用出现异常

后台日志显示: javanetConnectException: Connection timed out

我开始查看nginx日志, 发现没有找到请求日志, 怀疑是nginx问题, 使用curl请求ecs, 返回值正常, 使用curl请求外网域名, curl无反馈, 看来问题出现在阿里云的slb上面

去网上搜了搜, 还真有人遇到同样的问题, 只是标题是不是很一致

解决方案是将slb的tcp监听改为>

获取请求头信息,可以在curl_exec函数执行前,添加代码curl_setopt($ch,CURLINFO_HEADER_OUT,true);在curl_exec函数执行后,通过 curl_getinfo($ch,CURLINFO_HEADER_OUT) 来获取curl执行请求的请求数据。

获取响应头信息,可以在curl_exec函数执行前,添加代码 curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_NOBODY,true); 之后 通过curl_exec函数来获取响应头信息。获取设置 curl_setopt($ch, CURLOPT_NOBODY,false);然后对curl_exec获取的值通过\r\n\r\n进行分割截取第一部分即为响应头信息。

用域名访问的时候捏,首先服务器要去找到域名对应的IP,从访问来讲,最后还是用IP访问的,超时的话应该DNS解析这个域名的时候超时了,要不就是你的DNS有问题,你换一个DNS试试,要不就是你的这个域名不对,你试下直接解析

nslookup baiducom

上面命令可以直接将解析的Ip返回的,

nslookup baiducom 180767676

这条后面是指定用哪个DNS解析,如果不加就是用本机指定的DNs解析的

方法1、

$text = file_get_contents($URL);

方法2、

function get_URL($url)//获得url地址的网页内容{$ch = curl_init();$timeout = 5;curl_setopt ($ch, CURLOPT_URL,$url);curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);$file_contents = curl_exec($ch);curl_close($ch);return $file_contents;}

$text = get_URL($URL);

程序没问题,能得到网页内容并输出。

有可能是你的 xxxphp 没有重定向成功。

如果在Linux下,可以先用

wget >

以上就是关于php file_get_contents(url)在本地测试可以获取到远程url的内容,但上传至服务器后返回的确实空的值全部的内容,包括:php file_get_contents(url)在本地测试可以获取到远程url的内容,但上传至服务器后返回的确实空的值、怎么获取通过curl get方式获取的数据、阿里云slb+nginx配置curl无法获取url问题小记等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9564475.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存