升级MT dv 3.0主机到php5

MT主机dv 3.0上的php默认是4,现在已经是php5时代了,不知道MT什么时候默认给配php5,现阶段官方的方式仍然是由用户自行升级,详细步骤见kb中的Upgrade to PHP5 on (dv) 3.0 Dedicated Virtual Servers

推荐使用suexec方式,这样每个用户执行cgi使用的都是自己的身份,即安全也便于管理。suexec要求的前提条件有三个,就是用户的主机设置开启如下三个选项:

  • PHP支持打开,安全模式safe_mode关闭。
  • CGI支持打开。
  • FastCGI支持打开。

具体步骤说起来也是很简单的,首先把/opt/php51下的php5执行文件拷贝到用户目录下,并设置相应权限:

cp /opt/php51/cgi-bin/php5 /var/www/vhosts/<domain>/bin/
cd /var/www/vhosts/<domain>/
chown -R <domain-user>:psacln bin/

其中<domain>是用户的域名,<domain-user>是用户的ssh/ftp用户名,然后编辑/var/www/vhosts/<domain>/conf/vhost.conf文件,添加如下内容:

AddHandler fcgid-script .php .php5
SuexecUserGroup <domain-user> psacln
<Directory /var/www/vhosts/<domain>/httpdocs>
     FCGIWrapper /var/www/vhosts/<domain>/bin/php5 .php
     FCGIWrapper /var/www/vhosts/<domain>/bin/php5 .php5
     Options ExecCGI
     allow from all
</Directory>

如果是https站点,除了httpdocs换成httpsdocs之外,配置文件名称为vhost_ssl.conf。最后启用设置:

/usr/local/psa/admin/sbin/websrvmng -a -v

就可以了,我们主机上现在的php5版本是5.1.4,还是不够新:)。

为了方便操作,自己写了个小脚本:

#! /bin/bash
# Automatic enable php5 support for mediatemple user(via suexec).

# Pre-prepare in plesk:
#   php support is checked, safe_mod 'on' is UNCHECKED
#   cgi support is checked.
#   fastcgi support is checked.

# Check username, must run with root
WHOAMI=`whoami`
if [ ! $WHOAMI == 'root' ]; then
    echo "This script must run with root."
    exit 1
fi

# Check parameters
if [ $# -lt 2 ];then
    echo "Usage: `basename $0` ssh_user domain"
    exit 1
fi
USER=$1
DOMAIN=$2

# If given a wrong domain, exit
if [ ! -d /var/www/vhosts/$DOMAIN ]; then
    echo "Domain doesn't exists."
    exit 1
fi

# Copy php5 files
cp /opt/php51/cgi-bin/php5 /var/www/vhosts/$DOMAIN/bin/
cd /var/www/vhosts/$DOMAIN/
chown -R $USER:psacln bin/
cd conf

BEGIN="###_87b4e7fc -- Add by enable_php script, DON'T modify this section --"
END="# -- Enable_php modify section end -- 87b4e7fc_###"

# If vhost.conf doesn't exists, create it with default content
if [ -z vhost.conf ]; then
    echo "\\
$BEGIN\\
$END\\
" >> vhost.conf
else
    MARK=`grep "###_87b4e7fc" vhost.conf|wc -l`
    if [ $MARK -eq 0 ]; then
        # If vhost.conf exists & not mark, add replace mark
        echo "\\
$BEGIN\\
$END\\
" >> vhost.conf
    fi
fi
# Vhost_ssl.conf
if [ -z vhost_ssl.conf ]; then
    echo "\\
$BEGIN\\
$END\\
" >> vhost_ssl.conf
else
    MARK=`grep "###_87b4e7fc" vhost_ssl.conf|wc -l`
    if [ $MARK -eq 0 ]; then
        # If vhost.conf exists & not mark, add replace mark
        echo "\\
$BEGIN\\
$END\\
" >> vhost_ssl.conf
    fi
fi


STR="$BEGIN\\n\\
AddHandler fcgid-script .php .php5\\n\\
SuexecUserGroup $USER psacln\\n\\
<Directory \\/var\\/www\\/vhosts\\/$DOMAIN\\/httpdocs>\\n\\
    FCGIWrapper \\/var\\/www\\/vhosts\\/$DOMAIN\\/bin\\/php5 .php\\n\\
    FCGIWrapper \\/var\\/www\\/vhosts\\/$DOMAIN\\/bin\\/php5 .php5\\n\\
    Options \\+ExecCGI\\n\\
    allow from all\\n\\
<\\/Directory>\\n\\
<Directory \\/var\\/www\\/vhosts\\/$DOMAIN\\/httpsdocs>\\n\\
    FCGIWrapper \\/var\\/www\\/vhosts\\/$DOMAIN\\/bin\\/php5 .php\\n\\
    FCGIWrapper \\/var\\/www\\/vhosts\\/$DOMAIN\\/bin\\/php5 .php5\\n\\
    Options \\+ExecCGI\\n\\
    allow from all\\n\\
<\\/Directory>\\n\\
$END"

# Backup original configure
cp vhost.conf vhost.conf.`date +"%Y%m%d-%H%M%S"`
cp vhost_ssl.conf vhost_ssl.conf.`date +"%Y%m%d-%H%M%S"`

# Write configure information
sed -i -e ":begin; /###_87b4e7fc/,/87b4e7fc_###/ { /87b4e7fc_###/! { $! { N; b begin }; }; s/###_87b4e7fc.*87b4e7fc_###/$STR/g };" vhost.conf
sed -i -e ":begin; /###_87b4e7fc/,/87b4e7fc_###/ { /87b4e7fc_###/! { $! { N; b begin }; }; s/###_87b4e7fc.*87b4e7fc_###/$STR/g };" vhost_ssl.conf

# Active new configure
/usr/local/psa/admin/sbin/websrvmng -a -v

使用方法,用root用户执行:

enable_php5 <domain-user> <domain>

不支持subdomain的设置,其中sed替换多行内容的用法,可以参考我写的另外一篇文章用sed替换跨行内容

conf/vhost.conf这个文件存在之后,并不会自动被apache调用,执行/usr/local/psa/admin/sbin/websrvmng -a -v可以自动在conf/httpd.include文件中include vhost.conf了。而conf/httpd.include这个文件是由plesk维护的,用户不要直接修改它,会被plesk覆盖掉。

另外由于使用的是suexec方式执行,所以上传目录、cache等以前需要设置apache用户有可写权限的文件,现在要把owner设置为<domain-user>:psacln才行,和用户的其他文件权限一样就可以了,是不是管理起来更方便一些?

看了一下phpinfo,自动加载了位于/opt/php51/lib/php5/extensions/下的如下模块:

curl.so  gd.so        mysql.so    pdo.so        sockets.so  zlib.so
dom.so   iconv.so     mysqli.so   pdo_mysql.so  sqlite.so
ftp.so   mbstring.so  openssl.so  posix.so      xsl.so

基本上常用的都有了,但不知道/opt/php51这个目录下的内容MT什么时候给更新,还是说需要用户自己更新?

参考

升级WordPress从1.5到2.0

今天正好有些空闲时间,就顺便把WordPress 1.5升级成了2.0,升级很简单,上传所有新文件,然后吧wp-config.php配置好,把原来旧的theme目录、.htaccess文件等拷贝过来,然后运行wp-admin/upgrade.php基本上就差不多了。

同时还是不要忘记添加mysql要求的set names(文件是wp-includes/wp-db.php):

function wpdb($dbuser, $dbpassword, $dbname, $dbhost) { $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword); //加上下面这行 $this->query(‘SET NAMES “utf8″‘);

还有修改一下生成摘要的方式,参见更改WordPress自动生成摘要的方式

一点点使用感受:

  • 默认下载的版本好像没有带新的模板,所以仍然拿原来的模板用上了。
  • 分类Category的链接地址处理和1.5有些不同,2.0可以在链接前面和网站地址之间添加“Category base”,这样分类页面的地址定制就更灵活了。
  • 增加了缓存机制,缓存存在wp-content\cache目录下,如果发现更改设置没有生效,可以清空这个目录试一下。
  • 增加了WYSIWYG所见即所得的编辑器,不过我更喜欢直接控制HTML的感觉,几个简单的b、link、img就足够我用了。
  • Permalink定制的功能更强大和方便了,不过原来我用的.htaccess文件拿来照样能用。
  • 依然会将单引号替换成‘ ’,双引号替换成”,源码中还发现了更多的替换条件。
  • 后台管理界面更好看了,现在的蓝色背景和blogger有点像。
  • 增加了导入其他blog或rss内容的功能,对有些朋友应该很有帮助。
  • 没有了设置上传文件路径的选项,可能上传文件都要存储到wp自己的目录下面了吧。

update @ 2006-8-9 升级wp 2.0到2.04步骤完全相同,升级后启用了Akismet来防止spam。