用YUM升级CentOS系统中PHP和MySQL

用上umVPS后,很多时候在虚拟主机不用自己动手的事情都要自己搞定了,例如:PHP和MySQL的升级。因为不用自己动手,也动不了,所以冰古不太清楚虚拟主机的PHP和MySQL是不是会及时地更新。但用VPS,可以动手玩一下也保证安全,冰古是很乐意进行更新的。以下就是用YUM升级CentOS系统中PHP和MySQL的过程:

yum是CentOS系统自带的用于方便地添加/删除/更新RPM包的工具,它能自动解决包的倚赖性问题。
用yum更新PHP,只需用一条命令就可以搞定:

#yum update php

但问题来了,使用此命令后,系统告诉我,没有发现可更新的包。而当前的PHP版本只是5.2.1,PHP官方已经更新到5.2.6了。
经过一番询问,才知道原来CentOS系统的源里PHP仍旧是5.2.1,需要额外的源才能升级PHP。
根据外国网友的介绍,冰古添加了额外的源
登录SSH后依次运行下列命令:

#rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

#vi /etc/yum.repos.d/utterramblings.repo #文中这里是使用nano,但VPS不能启动nano,用vi代替也是可以的

在打开的文档中加入下面内容:

[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

保存。
再次运行下面的命令就可以完成php的升级了

#yum update php

同理,运行下面命令,升级mysql

#yum update mysql

用PHP得到访问者的真实IP

在php中,通常我们用$_SERVER[‘REMOTE_ADDR’]得到访问者的ip。但当访问者使用了代理,它只能得到代理的ip。这时使用下面的函数就能得到访问者的真实ip:

function getRealIpAddr(){
  if (!empty($_SERVER['HTTP_CLIENT_IP'])){//check ip from share internet
    $ip=$_SERVER['HTTP_CLIENT_IP'];
  }
  elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){//to check ip is pass from proxy
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
  }else{
    $ip=$_SERVER['REMOTE_ADDR'];
  }
  return $ip;
}

事实上这个函数也不是万能,众所周知,头信息是可以伪造的。

令人失望的《PHP5项目开发实战详解》

《php5项目开发实战详解》是由国内著名的php学习讨论网站phpchina编著的一本定位于初学者(“为php初学者量身定制的秘籍”)的php入门书。今天大致看了下来,却是极其令人失望,这也再次验证了买电脑方面的书还是选外国作者编著的好。

该书与外国编著的书之间的差距:

一、语言文字。其实这个理应是由使用自己语言书写的《PHP5项目开发实战详解》胜出的,但很遗憾,该书多处出现的错别字。(请恕我不重新翻看错漏,这里就不指出了)翻译书可能由于它是翻译书,有专人进行检错,这方面问题还是不太多见的。

二、代码印刷。该书整本书下来只使用了一种字体、一个字号和一种字型,而且该字体加上其字宽的效果让人很不舒服。不要说代码是不能印刷漂亮的,看看PHP入门经典《PHP程序设计》中的代码印刷,效果就很好。

三、代码规范。这个可以说是最差的!不说全书的HTML使用table浪费的行数,单单是“时不时”出现的短标签,就可以看出编者写作的用心程度。其他代码也是乱七八糟的:时而是二,时而是四,时而又无的缩进;网上随便下个留言板代码都不会差过该书的留言本代码;……

四,章节安排。没必要出现的第八章HTML语言;少得可怜的第九章PHP语言基础(该书可是“为PHP初学者量身定制的……”);重复的三四五六章和附录A。

五,……

买了数年电脑方面的书,最不满意的一本《PHP5项目开发实战详解》。而且市面上基本没有PHP进阶的书,只有重复再重复的入门书……

修补wordpress的受攻击弱点

多个版本的wordpress都有这个受攻击弱点。

WordPress WordPress (B2) 0.6.2 .1
WordPress WordPress (B2) 0.6.2
WordPress WordPress 2.0.5
WordPress WordPress 2.0.4
WordPress WordPress 2.0.3
WordPress WordPress 2.0.2
WordPress WordPress 2.0.1
WordPress WordPress 2.0
WordPress WordPress 1.5.2
WordPress WordPress 1.5.1 .3
WordPress WordPress 1.5.1 .2
WordPress WordPress 1.5.1
WordPress WordPress 1.5
WordPress WordPress 1.2.2
WordPress WordPress 1.2.1
+ Gentoo Linux
WordPress WordPress 1.2
+ Gentoo Linux 1.4
+ Gentoo Linux
WordPress WordPress 0.71
WordPress WordPress 0.7

但这个弱点已经在2.0.6中修补,但当前流行使用的版本为2.0.5,所以大家还是自己补上吧:
我翻了一下我保存的各个版本的wordpress,不知道为什么也找不到原文中提到的代码。(wordpress应该是没有attribute_escape()函数的)
2.0.5中应该是这样修补的:
打开 your-wordpress/wp-admin/templates.php (应该在114行),找到

echo "<li><a href='templates.php?file=" . wp_specialchars($recent, true) . "'>" . get_file_description(basename($recent)) . "</a></li>";

修改为

echo "<li><a href='templates.php?file=" . wp_specialchars($recent, true) . "'>" . wp_specialchars(get_file_description(basename($recent))) . "</a></li>";

wordpress-1[1][1].5.2、2.0 RC2、2.0.2 – 2.0.4的templates.php原代码是这样的,

echo "<li><a href='templates.php?file=$recent'>" . get_file_description(basename($recent)) . "</a></li>";

修改为

echo "<li><a href='templates.php?file=" . wp_specialchars($recent, true) . "'>" . wp_specialchars(get_file_description(basename($recent))) . "</a></li>";

打开 your-wordpress/wp-admin/templates.php ,找到

echo "<li><a href='templates.php?file=" . attribute_escape($recent) . "'>" . get_file_description(basename($recent)) . "</a></li>";

修改为

echo "<li><a href='templates.php?file=" . attribute_escape($recent) . "'>" . wp_specialchars(get_file_description(basename($recent))) . "</a></li>";

查看更多:WordPress Template.PHP HTML Injection Vulnerability
跨站脚本攻击(XSS)FAQ

更新blogbus to wordpress转换程序

不久前写了个从blogbus跳转到WordPress的小程序,因为只是简单在本地测试了一下就迫不及待的post出来与大家分享。没想到上传到服务器后运行却与本地测试有较大的差别,一直不能完整的把blogbus的备份文件转换到rss格式。

今天在网络闲逛时发现了一个XML to PHP的库,发现这个应该可以用在blogbus2wp的转换中。

果然一切都变得简单了。经过使用这个库,可以比较完美地把blogbus备份中的数据取出。我所要做的只是把数据格式化为rss2。

使用方法:
下载blogbus2wordpress.zip,解压;
根据你的需要修改index.php中的

$filename = ‘bus.xml’;
$allowtag = true;

上传index.php、xml.php和blogbus的备份文件到你的空间中(如果你使用的是BSP,你可以在本地安装一个php);
运行index.php;
将所得到的页面保存为xml(以xml为后缀名)文件;
在wordpress的后后台中import即可。

Tips:import过程中,wp会将xml文件上传到你的wordpress目录 -> wp-content -> uploads文件夹中。当import完成后,你可以删除它,节省空间!

如果你在使用中遇到问题可以在这里comment,或者直接Gmail我

参考:PHP XML Library

用PHP验证邮箱有效性

sitepoint挖到一篇Verify a User’s Email Address Using PHP,本来打算自己翻译一下,学习一下。所以翻PHP Funtion查找当中出现的函数,无意中就发现checkdnsrr函数那里就有了更精妙的例子,分享给大家!
Read More »