在Zeus Web Server中安装PHP语言支持


Posted in PHP onOctober 09, 2006

前言
Zeus是一个运行于Unix下的非常优秀的Web Server,而PHP则是Unix下一个非常优秀的后台脚本语言。 这两个产品都是为非常喜欢的产品。为什么要写这样的一个Howto呢?是因为有大量的网站脚本是使用PHP开发的, 而这些程序运行在Zeus下也是一个非常好的选择。写这份文档的目的在于能让大家的PHP系统良好的运行于Zeus服务器上。
很早的时候我写过一份整合Zeus和PHP的文章,它主要是讲如何将PHP以FastCGI的本地调用方式来运行于Zeus中的, 本份Howto主要是来讲如何让PHP运行于Remote Responders方式下。因为这样会比以local方式有更高的可扩展性和运行效率。

准备工作
首先你应该Zeus安装完成,也不会过多的讲如何安装和配置Zeus服务器本身,因为它的安装和配置实在是太简单了。
如果有可能,最好将ports使用cvsup来升级一下。
对于PHP依赖的相关软件如果能提前装,则从ports中安装好。如MySQL、GD等。 安装fastcgi
注意,如果你安装的PHP的版本会低于4.3.0哪么你才需要这步。新的PHP版本已经内置了fastcgi的库。安装fastcgi的方法非常的简单:

root@~$cd /usr/ports/www/fcgi/
root@/usr/ports/www/fcgi$make;make install;make clean
编译完成后我们可以在/usr/local/lib目录中看到有libfcgi.a文件,同时在/usr/local/include目录中会有fastcgi的所有头文件。

 

编译PHP
编译PHP可以使用通常的PHP编译选项,下面是我使用的一个配置:

./configure --prefix=/usr/local/php --enable-fastcgi --with-mysql=/usr/local
需要注意的是在PHP 4.3.0以上版本是使用的 --enable-fastcgi 选项,而PHP 4.3.0以前的版本应使用--with-fastcgi参数。
接着就是安装PHP到系统中:
make
make install
编译完成后,我们来测试一下安装的php是能正确运行:

root@~$cd /usr/local/php/bin/
root@/usr/local/php/bin$./php
这时将进入php代码输入状态,输入

<? phpinfo(); ?>
按ctrl-d运行后会见到php返回的信息则为正确。

配置FastCGI/PHP
配置FastCGI
进入Zeus管理控制台,打开需要配置的VHost配置。进入 API Support 中的 FastCGI 设置。在其中设置:
Enabling Support for FastCGI Programs : Enable
在Configuring FastCGI Remote Responders中设置:
Directory name : /usr/local/php/bin/php
Location: Machine name: localhost
Additional methods supported?:None
如果你的PHP应用不在本机,即使PHP没有安装在本机上,哪么也要设置 Docroot path 参数,它可以不存在于相应的目录下。
都设置完成后,点击 Apply 按钮。 配置PHP解析指向
进入 URL Handling 中的 Handlers 设置。在 Adding a Handler 中设置以下参数:

File Extension : php
Specify the path and filename of the handler, relative to the document root : /usr/local/php/bin/php
HTTP 404 errors are handled by : The handler
注意,这里的 Specify the path and filename of the handler, relative to the document root 应和你上一步设置的 Directory name 值相同。
都设置完成后,点击 Apply 按钮。
所有的设置完成后使用vhost的commit功能将更 改提交并应用。这样Zeus就设置好了Fastcgi和PHP的相关参数。

配置FastCGI/PHP启动
在Zeus的rc.d目录中新建一个S05php的文件,内容为:

#!/bin/sh

# Script to start and stop the persistent PHP runner for FastCGI.
# Please check paths before use.

# FastCGI PHP binary
FPHPBIN=/usr/local/php/bin/php

# Location to place semaphore
SEMFILE=/tmp/php.pid
PHP_FCGI_CHILDREN=100
PHP_FCGI_MAX_REQUESTS=1000
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS

# This is Linux - use /proc to increase the local (ephemeral) port range
#echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range

if [ -z "$ZEUSHOME" ]
then
cd `dirname $0`/..
ZEUSHOME=`pwd`
export ZEUSHOME
fi

case "$1" in
'start')

if [ -e $SEMFILE ]
then
echo FastCGI PHP error: already running.Restart FastCGI PHP now
kill `cat $SEMFILE`
sleep 5
fi

if [ ! -x $FPHPBIN ]
then
echo FastCGI PHP error: please check that $FPHPBIN is executable and exists.
exit 1
fi

echo Starting FastCGI PHP.
$ZEUSHOME/web/bin/fcgirunner --user=65534 --group=65534 --pidfile=$SEMFILE 8002 $FPHPBIN
;;

'stop')
if [ -e $SEMFILE ]
then
echo Stopping FastCGI PHP.
kill `cat $SEMFILE`
rm $SEMFILE
exit 0
fi

'restart')
if [ -e $SEMFILE ]
then
echo Stopping FastCGI PHP.
kill `cat $SEMFILE`
sleep 5
fi
echo Starting FastCGI PHP.
$ZEUSHOME/web/bin/fcgirunner --user=65534 --group=65534 --pidfile=$SEMFILE 8002 $FPHPBIN

*)
echo "usage: $0 {start|stop|restart}"
;;

esac
exit 1

在这个脚本中有以下内容需要视系统情况而 修改:

FPHPBIN=/usr/local/php/bin/php 应设置为php的路径
SEMFILE=/tmp/php.pid 生成php.pid的路径,该目录必须可写
PHP_FCGI_CHILDREN=100 php进程数目
PHP_FCGI_MAX_REQUESTS=1000 每个php的进程在退出前能够响应的请求数,用于释放资源 上面两个根据硬件配置和网站访问量设置,默认值是8,500。 一般来说 PHP_FCGI_CHILDREN > 访问并发最大值+10
PHP_FCGI_MAX_REQUESTS 如果设置过小,访问量大的网站会因为php进程重起频繁增加负荷。
#echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range 只用于linux
--user=65534 --group=65534 为php进程运行的用户和组,一般设置为nobody用户和组FreeBSD是65534/65534,Linux是99/99
最后,将S05php文件设置为可执行文件,并将FastCGI/PHP运行起来:

chmod 755 S05php
./S05php start
一但启动后就会在ps -ax列表中显示出PHP_FCGI_CHILDREN+1个php进程。
到你的vhost对应的Docroot目录中建一个info.php文件,内容为:
<?
phpinfo();
?>
使用浏览器访问vhost中的info.php文件,应该就可以看到PHP的info页面了。

 

附注
感谢CCF的坛主hunreal写出的S05php脚本,它真的非常好用!
如果还有什么想了解的可以到 Zeus PHP支持 页得到更多的信息。

注:任何转载或摘抄请注明文章出处(中文FreeBSD用户组 http://www.cnfug.org)

 

PHP 相关文章推荐
使用无限生命期Session的方法
Oct 09 PHP
php SQL Injection with MySQL
Feb 27 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
PHP基于自增数据如何生成不重复的随机数示例
May 19 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
通过对php一些服务器端特性的配置加强php的安全
Oct 09 #PHP
一个阿拉伯数字转中文数字的函数
Oct 09 #PHP
PHP与已存在的Java应用程序集成
Oct 09 #PHP
使用PHP模拟HTTP认证
Oct 09 #PHP
在PHP中使用XML
Oct 09 #PHP
使用PHP维护文件系统
Oct 09 #PHP
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 #PHP
You might like
用PHP读取flv文件的播放时间长度
2009/09/03 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jQuery使用手册之一
2007/03/24 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
js排序与重组的实例讲解
2017/08/28 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
Python的Django框架中settings文件的部署建议
2015/05/30 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
Python 寻找局部最高点的实现
2019/12/05 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
品恩科技软件测试面试题
2014/10/26 面试题
实习教师自我鉴定
2013/09/27 职场文书
物流管理专业应届生求职信
2013/11/21 职场文书
合作协议书范文
2014/08/20 职场文书
刑事代理授权委托书
2014/09/17 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
高中班主任评语
2014/12/30 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server