MT主机dv 3.0上的php默认是4,现在已经是php5时代了,不知道MT什么时候默认给配php5,现阶段官方的方式仍然是由用户自行升级,详细步骤见[kb中的Upgrade to PHP5 on (dv) 3.0 Dedicated Virtual Servers](http://kb.mediatemple.net/article.php?id=260)。
推荐使用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替换跨行内容](346)。
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什么时候给更新,还是说需要用户自己更新?
参考
- [(mt) (dv) 3.0 入门](http://www.v2ex.com/topic/view/13732.html)
插代码的框不能作个滚动条啊…
ps.鄙视留言还要加个万恶验证码的blog
你既然有 root 的权限何必等 mt 的更新,自己 compile 一个新版的就好了。我现在主机上 php5 是 5.2.3
@DonglaiJev 滚动条已经加上了,其实是IE的兼容性问题,我一直用FF所以没发现。 另外默认留言没有验证码吧,验证码出现的原因是你的第一条评论处于待审核状态。
@Michael 我是linux新手啊,自行编译的经验极低,不过有时间会去研究的。
@fwolf, 你也太谦虚了。。。编译的文章网上哪儿哪儿都是,我这么菜的人都能干。。。
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
多谢。
如果用ie打开正常,就应该不是服务端的问题,可能是ff的缓存原因? httpd.conf中至少要有:
自己升级的php,php.ini的位置应该是
/opt/php51/etc/php5/fastcgi/php.ini
。多谢站长。确实是ff缓存问题。不过还是有些页面打开全是空白的,ie、ff都是空白。 看上面说明php.ini应该设置为打开安全模式吧?safe_mode = On 会不会是因为php运行于安全模式,所以一些页面打开是空白。
还有个问题请教下,应该是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
空白页面我也遇到过,Ctrl+F5强制刷新就没事了,怀疑是传输的问题。 ssh和ftp账号是相同的,plesk的admin用户和root不是一码事,root需要自己去申请, admin只是在管理页面中使用。