升级MT dv 3.0主机到php5
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/347)的形式标明文章原始出处和作者信息及本声明。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什么时候给更新,还是说需要用户自己更新?

Save to Browser Favorites
Ask
backflip
blinklist
BlogBookmark
Bloglines
BlogMarks
Blogsvine
BUMPzee!
CiteULike
co.mments
Connotea
del.icio.us
DotNetKicks
Digg
diigo
dropjack.com
dzone
Facebook
Fark
Faves
Feed Me Links
Friendsite
folkd.com
Furl
Google
Hugg
Jeqq
Kaboodle
linkaGoGo
LinksMarker
Ma.gnolia
Mister Wong
Mixx
MySpace
MyWeb
Netvouz
Newsvine
PlugIM
popcurrent
Propeller
Reddit
Rojo
Segnalo
Shoutwire
Simpy
sk*rt
Slashdot
Sphere
Sphinn
Spurl.net
Squidoo
StumbleUpon
Technorati
ThisNext
Webride
Windows Live
Yahoo!
Email This to a Friend
If you like this then please subscribe to the
August 9th, 2007 at 2:01:19
插代码的框不能作个滚动条啊…
ps.鄙视留言还要加个万恶验证码的blog
[Reply]
August 9th, 2007 at 8:11:45
你既然有 root 的权限何必等 mt 的更新,自己 compile 一个新版的就好了。我现在主机上 php5 是 5.2.3
[Reply]
August 9th, 2007 at 11:06:44
@DonglaiJev 滚动条已经加上了,其实是IE的兼容性问题,我一直用FF所以没发现。
另外默认留言没有验证码吧,验证码出现的原因是你的第一条评论处于待审核状态。
@Michael 我是linux新手啊,自行编译的经验极低,不过有时间会去研究的。
[Reply]
August 9th, 2007 at 18:36:48
@fwolf, 你也太谦虚了。。。编译的文章网上哪儿哪儿都是,我这么菜的人都能干。。。
[Reply]
December 1st, 2007 at 19:52:28
hi,
你好,我也和朋友购买了mt的dv,按照你这个教程把php升级到了5.1。其它就没改什么了。
不过现在用ff打开首页是下载application/x-httpd-php,很多页面也打不开。用ie打开正常。
通过ssh查看/etc/httpd/conf/httpd.conf 和 /etc/php.ini 这两个文件都没什么内容,只是一些说明。php.ini需要设定吗?到底是哪一个目录下的呢,我发现系统里有好几个php.ini
多谢。
[Reply]
December 1st, 2007 at 21:13:57
如果用ie打开正常,就应该不是服务端的问题,可能是ff的缓存原因?
httpd.conf中至少要有:
自己升级的php,php.ini的位置应该是
/opt/php51/etc/php5/fastcgi/php.ini。[Reply]
December 1st, 2007 at 22:20:23
多谢站长。确实是ff缓存问题。不过还是有些页面打开全是空白的,ie、ff都是空白。
看上面说明php.ini应该设置为打开安全模式吧?safe_mode = On
会不会是因为php运行于安全模式,所以一些页面打开是空白。
[Reply]
December 1st, 2007 at 22:24:51
还有个问题请教下,应该是plesk的admin用户的第一个站点,这个应该就是该网站的ssh/ftp帐号,而不是root帐号吧?
AddHandler fcgid-script .php .php5
SuexecUserGroup psacln
<Directory /var/www/vhosts//httpdocs>
FCGIWrapper /var/www/vhosts//bin/php5 .php
FCGIWrapper /var/www/vhosts//bin/php5 .php5
Options ExecCGI
allow from all
[Reply]
December 2nd, 2007 at 0:06:58
空白页面我也遇到过,Ctrl+F5强制刷新就没事了,怀疑是传输的问题。
ssh和ftp账号是相同的,plesk的admin用户和root不是一码事,root需要自己去申请,
admin只是在管理页面中使用。
[Reply]