不知道什么时候,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)