php读取调用远程文件时报错Name or service not known/fedora linux下

不知道什么时候,fedora 14上的php读取http远程文件时就报错,像下面这样

Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/lib/www/html/myworks/dn2ip/dn2ip.php on line 27

file(),fopen()等函数也有类似情况,如果直接指定ip地址连接是没有问题的,使用php cli也是正常的。另外gethostbyname函数也有问题,$ip = gethostbyname('www.baidu.com'); var_dump($ip); 执行结果是浏览器上输出 www.baidu.com,根本没有解析域名,而只把参数传出来,也没有报错,包括warning级别的错误也没有。

多方查找都没有找到原因,包括在英文站点上搜索也没找到可以解决问题的方案。网上大体有这些方案:检查命令行执行wget 等是否正常执行,检查主机dns服务器设置,重启apache等,但我的fedora是笔记本上的系统,不知道重启了多少次!

实在是很郁闷。想起完全卸载php,甚至连apache也卸载,然后清理一下相关残留文件,再重启重新安装试试。

yum erase php后,重启还有如下一些php包没的卸载,

[root@fsc ~]# rpm -qa |grep php
php-cli-5.3.6-1.fc14.i686
php-gd-5.3.6-1.fc14.i686
php-pdo-5.3.6-1.fc14.i686
php-mbstring-5.3.6-1.fc14.i686
php-xml-5.3.6-1.fc14.i686
php-mysql-5.3.6-1.fc14.i686
php-common-5.3.6-1.fc14.i686

[root@fsc ~]# rpm -ev php-cli php-gd php-pdo php-mbstring php-xml php-mysql php-common
warning: /etc/php.ini saved as /etc/php.ini.rpmsave

php配置文件曾经修改过,与rpm包里的原始版本不一致,所以被rpm自动备份下来了,重新安装php时很有参考价值的。

没有重启httpd,执行刚才的测试文件,发现居然可以解析域名了!那就不用重启再安装php了,直接yum install php,再安装另外几个包,yum install php-mbstring php-xml php-gd ,重启apache,完成!

这个非常怪异的问题,困扰了好些天,这次又莫名其妙的好了。原因不清楚。

 

-------------错误消息文本记录-------------------------------------

执行如下代码

$host="ip138.com";
var_dump(gethostbyname($host));

$url="http://www.baidu.com/";
$html=file_get_contents($url);

完整的错误消息,供参考(使用了xdebug,输出比php默认的消息更友好一点)

string 'ip138.com' (length=9)

 

( ! ) Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/lib/www/html/myworks/dn2ip/dn2ip.php on line 27
Call Stack
# Time Memory Function Location
1 0.0015 331060 {main}( ) ../dn2ip.php:0
2 0.0105 331556 file_get_contents ( ) ../dn2ip.php:27

 

( ! ) Warning: file_get_contents(http://www.baidu.com/) [function.file-get-contents]: failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/lib/www/html/myworks/dn2ip/dn2ip.php on line 27
Call Stack
# Time Memory Function Location
1 0.0015 331060 {main}( ) ../dn2ip.php:0
2 0.0105 331556 file_get_contents ( ) ../dn2ip.php:27
string 'http://www.baidu.com/' (length=21)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据