版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
php执行curl错误:Could not resolve host: www.baidu.com; Name or service not known解决办法
在获取远程数据的时候,碰到一个很头疼的事情:
$url = 'https://www.baidu.com';
$curl = curl_init($url);
//设置选项
curl_setopt_array($curl, array(
CURLOPT_TIMEOUT => 30, //超时时间
CURLOPT_CUSTOMREQUEST => $method,// 请求方法
CURLOPT_RETURNTRANSFER => true,// 返回内容
CURLOPT_HEADER => false,// 返回header
CURLOPT_FOLLOWLOCATION => true,// 自动重定向
CURLOPT_SSL_VERIFYPEER => false,// 不校验证书
));
//执行请求
$output = curl_exec($curl);
$info = curl_getinfo($curl);
$error = curl_error($curl);
curl_close($curl);
echo $output; //输出 false
echo $error; //输出 Could not resolve host: www.baidu.com; Name or service not known
在php-fpm模式下用php的curl模块获取资源的时候,返回false,打印错误:Could not resolve host: www.baidu.com; Name or service not known, 简单翻译一下,就是获取不到这个域名的地址,什么鬼?然后进行错误排查:
- 检查服务器dns等解析均正常
- 用file_get_contents等方法在php-fpm模式下均失败,提示相同错误
- 同样代码,直接在服务器命令行方式执行,正常,包括file_get_contents等方法
- 见鬼了,初步怀疑是php的执行权限导致的问题
然后在google的强力搜索引擎下,查到外国论坛类似错误的解决方案,杀掉php-fpm进程,然后用systemctl restart php-fpm
启动php-fpm成功,然后在尝试,嘿,终于成功了。
所以,记录下解决方法:用systemctl restart php-fpm
方式启动php-fpm即可
还有另一种情况:DNS解析不对
检查DNS设置是否正确
vim /etc/resolv.conf
#设置DNS
nameserver 114.114.114.114
nameserver 8.8.8.8
记得给文件夹权限哦:
chmod 644 /etc/resolv.conf
保存文件,大功告成,如果按照上面问题不能解决,欢迎留言,一起学习一起进步。