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)

linux 下系统信息的查阅命令

这是文字版

系统信息

#uname -a                 #查看内核/操作系统/cpu信息

#cat /etc/issue        #查看操作系统版本

#cat /proc/version    #包含GCC的版本信息

#cat /proc/cpuinfo     #查看CPU信息

#hostname               #查看计算机名

#lspci -tv                    #列出所有pci设备

#lsusb -tv                   #列出所有usb设备

#lsmod                      #列出加载的内核模块

#env                          #查看环境变量

资源信息

#free -m              #查看内存使用量和交换区使用量

#df -h                    #查看各分区使用情况

#du -sh <目录名>  #查看指定目录的大小

#grep MemTotal /proc/meminfo  #查看内存总量

#grep MemFree /proc/meminfo  #查看空闲内存总量

#uptime           #查看系统运行时间,用户数,负载

#cat /proc/loadavg  #查看系统负载

 

磁盘信息

#mount | column -t    #查看挂接的分区状态

#fdisk -l                    #查看所有分区

#swapon -s                #查看所有交换分区

#hdparm -i /dev/hda   #查看磁盘参数(仅适用于ide设备)

#dmesg | grep IDE          #查看启动时IDE设备检测状况

 

网络信息

#ifconfig                       #查看所有网络接口的属性

#iptables -L                 #查看防火墙设置

#route -n                     #查看路由表

#netstat -lntp               #查看所有监听端口

#netstat  -antp             #查看已经建立的连接

进程信息

#ps -ef                         #查看所有进程

#top                             #实时显示进程状态

用户信息

#w                                  #查看活动用户

#id <用户名>                   #查看指定用户信息

#last                               #查看用户登录日志

#cut -d : -f1 /etc/passwd #查看系统所有用户                                   

#cut -d: -f1 /etc/group     #查看系统所有组

#crontab -l                       #查看当前用户的计划任务

不引用外部图片文件,实现往网页html里插入图片

看这是一张图片,但并没有文件引用任何外部图片文件而是直接写在html里的base64代码!

形式大致如下

<img src=”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnoAAAHfCAIAAABI8eKbAAAgAElEQVR4nOydd3wTR/r/1+buUn65S7+7XL6XS3I50i+FJHQwSYAkdEyH0EMgGEwH021sg42pNsWYZooLxr1X2ZYsd8tW79XqXe5F3t8faxRFWq3WnXDzvN4vv1azz8w8M7szH83uag3R

今天实然发现的,windows下prt src 抓屏,直接在wordpress后台编辑器里ctrl+v粘贴即可。

wordpress迁移服务器后WP Super Cache 错误:Warning! WP Super Cache caching broken! The script advanced-cache.php could not load wp-cache-phase1.php

Warning! WP Super Cache caching broken! The script advanced-cache.php could not load wp-cache-phase1.php.

Please edit /var/www/html/ and make sure the path to /var/www/html/wp-content/plugins/wp-super-cache/wp-cache-phase1.php is correct.

把整个wordpress打包压缩迁移到新的服务器上后,发现后台里出现这样的一条错误消息,以前根本没有的。清理wp super cache缓存,都不行。查了官方的FAQ,仔细查看了一下文件wp-content/advanced-cache.php 发现问题所在了,文件内容如下

<?php
# WP SUPER CACHE 0.8.9.1
function wpcache_broken_message() {
if ( false == strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin' ) )
echo "<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->";
}
if ( !include_once( '/home/xxxxx/www/html/wp-content/plugins/wp-super-cache/' . 'wp-cache-phase1.php' ) ) {
if ( !@is_file( '/home/xxxxx/www/html/wp-content/plugins/wp-super-cache/' . 'wp-cache-phase1.php' ) ) {
define( 'ADVANCEDCACHEPROBLEM', 1 );
register_shutdown_function( 'wpcache_broken_message' );
}
}
?>

文件内容红色加粗部分(如果你看不到红色或加粗,请到这里来看http://www.path8.net/tn/archives/4342 ),就是wp-cache-phase1.php文件的路径,错的,是之前老服务器上的路径,自然是无法引用到文件的。修改为相对新服务器正确的路径的,保存完成。

顺便说一句,wp super cache的开发人员在这里没有使用相对路经(或带前缀常量的路径表示文件wp-cache-phase1.php的路径),所以整站迁移服务器后,路径就错了。如可以写成if ( !include_once( "{$const_wp_root}/wp-content/..... 这样的形式就可避免该问题;可能是因为各种原因,是这样写不方便,所以才直接写绝对路径了。

齐博CMS(原php168)整合百科系统(HDwiki)手记

php168是一套很完善的php建站系统,但某些情况下,一个完整的站点可能需要百科系统,尤其是行业门户网站;而HDwiki是一套比较良好的百科系统,与互动百科还有着天然的联系(导入分类词条、百科联盟等),对站长来说是很贴心的功能。

一位朋友要建一个行业网站站,正好就是这样的需求;于是初步确定使用php168,而不是使用帝国等,一来对相对不太熟悉,二则它们的后台好像在非IE下有些问题,而php168没有——个人主要在linux下工作,所以……不用讲了。

但PHP168本身没有与hdwiki的接口,直接整合用户,将是一个很有难度的工作。不过它们都有与discuz UCenter的接口插件,这是一件很令人兴奋的事情,让它们全部整合到一个Ucenter上,这就可以完美实现整合。

版本选择。php168使用当前最新的v7sp,Ucenter也是最新,1.5.2,而hdwiki就不用最新的了,因为它好像没有ucenter整合接口插件,所以使用4.1.

全部使用UTF-8编码的版本,否则中文名用户将无法正常登录。

  1. 先安装php168,管理员账号为admin
  2. 再安装ucenter,安装完后加一个管理员账号admin,跟php168管理员账号一致(下一步会有用)。
  3. 在php168后台里 系统功能 - 核心设置 - 整合外部论坛系统,选择‘整合Ucenter’,下面有详尽完善的说明,在此不需细说,php168在后台使用说明上做得实在很细致。
  4. 再安装hdwiki,管理员名为其默认的webmaster(不要使用admin)。
  5. hdwiki后台里直接就有安装整合插件的功能,不需要用下载到本地再通过ftp上传到web服务器上。(其实我一般不下载到本地的,都在ssh登录服务器,然后直接在服务器上wget下载,然后解压缩,复制到正确的位置;当然前提是服务器要有ssh);安装并设置Ucenter接口插件,这里有个问题,在ucenter管理后台 – 应用 里,hkwiki显示为“通信失败”,不过照样可以登录成功。可能是因为它是直接使用数据库读取uc用户数据,而非通过http的数据传递。
  6. 不要退出hdwiki管理员后台,换个浏览器,使用admin登录,登录hdwiki(新注册一个账号),然后在hdwiki管理员后台里把admin用户设置为超级管理员。否则webmaster退出后,就无法登录超级管理员了。(不过如果真的出现这种情况,请见下一步)
  7. hdwiki整合ucenter后,忘了设置管理员、就退出管理后台,拿admin登录,结果admin显示为普通用户,才想到出问题了。不过不要紧,直接修改数据库,到mysql里打开表`wiki_user`(如果安装hdwiki修改了默认表前缀请自行替换), 里面admin用户的uid为1,就是把该用户的组groupid修改为超级管理员的组名编号4就可以了,执行语句如下(请自行对照是否与你的数据相符)UPDATE `jju8`.`wiki_user` SET `groupid` = '4' WHERE `wiki_user`.`uid` =1;

如果不出意外,经过这几步,系统就可以完成整合了。

存在问题:hdwiki不能同步登录,可能就是ucenter应用里通信失败所致,这点目前还没有解决。

在firefox4下使用live http headers插件/live http headers for firefox4下载

[20161011更新] 该扩展的原始版本长期没有维护、而不再支持最新的firefox;但有一个克隆分支在正常维护中 Live HTTP Headers (clone) . https://addons.mozilla.org/zh-Cn/firefox/addon/live-http-headers-clone/

———- 下载是原始文章,没有校正,仅供参阅 ————

急需解决问题者请点此安装,不必看下文
livehttpheaders-0.16_hacked_for_fx4_from_path8-net.xpi (xpi格式,firefox下点击直接自动安装)

live http headers作为一款十分优秀的http请求调试工具,不需多讲了。

(先说段废话,没兴趣者请直接跳过看后面)以前firefox3升级时,都是等live http headers新版本出来后才升级;firefox4正式版已经发布有一段时间,然而还没有看到live http headers的新版本释出。在不经常用的windows2003下,安装了firefox4,基本没有安装插件。这两天做个asp的网站,必需在windows下调试,于是迫切需要live http headers,上网google,结果还是没有看到新版本的发布。

随手google “live http headers firefox4″,想看看是否有某个插件也有类似功能,结果看到一篇文章,如下

http://kulehandluke.com/2011/03/getting-live-http-headers-to-work-with-firefox-4/

英文的,相当简单易懂,是“让live http headers在firefox4下运行”,主体内容如下:

  • Download the .xpi file (Use right-click save as or Firefox will try to install the add-on)
  • Rename .xpi to .zip
  • Unzip the contents
  • Edit install.rdf
  • Under the <!– Firefox –> Section change <em:maxVersion>3.6.*</em:maxVersion> to <em:maxVersion>4.0.*</em:maxVersion>
  • Rezip the files
  • Rename it back to .xpi from .zip
  • In Firefox do file open, and open the .xpi file.

The add-on should install, just restart Firefox and use as normal.

Note: It works on my machine, however your mileage my vary.  Obviously, I recommend that you keep an eye out for an official update and install the proper version as soon as it’s available…

简单翻译一下

  • 下载.xpi 文件 (右击并“保存为”,否则firefox会尝试安装它 [而不是保存到本地])
  • 把.xpi文件改名为.zip [修改文件名后缀]
  • zip文件解压缩
  • 编辑解压缩出的文件 install.rdf
  • 在<!– Firefox –> 节点下,修改 <em:maxVersion>3.6.*</em:maxVersion>  为 <em:maxVersion>4.0.*</em:maxVersion>
  • 把文件重新zip压缩
  • 把文件名从.zip改回.xpi
  • 在Firefox 里打开该.xpi文件;[或者拖到firefox窗口上就可以安装了]

本插件应该可以被安装,跟往常一样重启firefox吧。

说明:这样可以在我的机器上正常进行,不过你的环境跟我可能不一样。很明显,我还是建议你经常查看官方的升级消息,并在官方新版本发布后及时升级。

再次感谢luke的解决方案.

http://kulehandluke.com/2011/03/getting-live-http-headers-to-work-with-firefox-4/

为了方便大家使用,可以直接从这里下载本插件(已修改过的)

livehttpheaders-0.16_hacked_for_fx4_from_path8-net.xpi (xpi格式,firefox下点击直接自动安装)

livehttpheaders-0.16_hacked_for_fx4_from_path8-net.zip (zip压缩包,需解压后再安装)

如果信不过非官方安装插件,请自行到官方下载 http://livehttpheaders.mozdev.org/installation.html并修改。

后记:

个人没有firefox插件开发的经验,也没有仔细查看过xpi包里的文件,但据以上修改插件估计,live http headers的开发者还是相当谨慎,对插件适用版本号定义非常严格。

借用php脚本快速实现php站点数据迁移

一个朋友的网站,换web服务器,要我帮忙。朋友的网站原本在我的虚拟主机空间上,但嫌网通访问速度慢,自己买了个比较快一点的。要换的也还是虚拟主机,而且是超简单的那种,只有一个基于web的简单后台,文件管理都很不完善,连zip压缩解压缩的功能没有,也没有直接下载远程文件并解压的功能,更不用说ssh了。对于这样的虚拟主机最怕就是ftp服务器再有问题。

然而最怕的事情还是来了。

经常在虚拟主机上见到微软的msftp,那个烂啊,都没有可以形容的词了。上传或下载文件的过程中,会莫名其妙的连接中断,要重新连接,而且更可恶的是服务器在断开连接时,连个消息都不给,直接断掉了,ftp客户端还在等待服务器上回应,结果是超时,然后客户端才知道是连接断掉了。有时在上传或者下载一个队列时,上传了一个文件,在进行下一个时,提示消息“传输失败”,然后客户会跳过进行再下一下,再下一个……当然也传问是失败。这个最令人无法忍受的事情,只能强制断开ftp客户端,再重新传输队列。十分的没有效率,而且影响心情。这次的问题跟这个类似,但似乎这个服务器不是windows的,它使用的ftp服务器消息中声称是ProFTPD,看来应该是linux,而虚拟主机服务器的管理员能把linux也搞成这样,实在对不起linux. 以前还从来没有见过配置得这么烂的linux + ftpd!

然而骂归骂,事情还是得做。这次迁移的其实一个很小的网站,只有一千多个文件,跟一个mysql数据库。使用filezilla传输,已经设置文件覆盖规则,以免传输一半被服务器单方面断开、而导致文件重传时的“文件覆盖提醒”。但还是实在无法忍受,传了半个小时才传上了200多个文件,失败的队列文件数目已经涨到300多个,看来照这样的速度,要传不知道多久了,还得多次重置失败队列。于 是想需要用另外的方法来实现,而不能使用ftp了。最简单的php,它本身有文件管理的功能,网上有很多基于php的文件管理工具,下载了几个试用,要么功能太差,没有zip功能,或者文件太多,比朋友的这个小网站文件还多。 因为之前搞过一次php写的zip文件解压缩脚本,不过是使用别人写的。而php本身有从外部站点上下载文件的功能,像fopen, file_get_contents等函数都可以很容易实现。那与其找php文件管理工具,还不如写个简单的程序在目标主机上运行。程序非常简单:

<?php
$foo=__FILE__;
$bar=pathinfo($foo);
$file_path=$bar[‘dirname’].’/xxx.zip’;
$data=file_get_contents(“http://xxx.path8.net/xxx/xxx.zip”);
$foo=file_put_contents($file_path,$data);
var_dump($foo);
?>

我的虚拟主机好歹有个ssh,可以很方便的压缩所有文件,并通过http访问。上面这段php脚本就可以实现从我的网站上通过http访问,并把整站的压缩文件下载到目标主机上(这里要注意目标主机上不否有写入权限,可以把目录设置777,迁移完成后再改回去)。然后,再使用一个zip解压工具,当然也要是php脚本编写的,网上有这个一个,有简单的页面设计,还比较直观,使用也较简单(附于本文后)。把这个工具也传到目标主机上,跟整站zip压缩包放在同一目录下,使用它解压缩zip,非常快,几秒钟就完成了,如果是使用ftp传输,那真不知道还要几个小时才能完成。

基于php的zip文件解压缩工具: unzip.php