本文来自
http://onmp.cublog.cn,欢迎转载!
本文的实验环境为:
OpenBSD 4.4-current
eAccelerator 0.9.5.3
一、系统环境的准备
OpenBSD的安装就不说了,需要的软件都使用pkg_add的方式安装,注意设定正确的PKG_PATH。
这里只介绍后面安装必须的软件环境(红色为输入的命令,蓝色为输入的文本内容,棕色表示要删除的内容)。
为了避免权限的问题,下面所有的操作都在root环境下进行。对安全特别重视的朋友或者远程安装的朋友请使用维护帐号登录,sudo执行。
pkg_add wget autoconf-2.59p3 unzip libtool m4 php5-core php5-fastcgi
(注意上面autoconf的版本,请根据packages中的情况自行修改)
(PHP装好后有个提示,请按提示做下连接并创建PHP工作目录):
ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules
mkdir /var/www/tmp
chown www /var/www/tmp
chgrp www /var/www/tmp
chmod 0755 /var/www/tmp
说明一下:上面的软件环境是最基本的,如果在你的服务器上还需要其他软件,请自行安装.
至此,软件环境已经准备好了,测试一下:
vi /var/www/htdocs/info.php
输入下面的内容:
phpinfo();
?>
保存退出,apachectl start启动web
server,用浏览器访问:应该可以看到PHP信息
(xxx.xxx.xxx.xxx是你服务器的IP地址).如果看不到,说明你前面没做对,请仔细对照本文档核对.
二、修改eAccelerator 0.9.5.3源码,适应OpenBSD环境
cd /tmp
wget
unzip eaccelerator-0.9.5.3.zip
cd eaccelerator-0.9.5.3
vi +110 eaccelerator.h
敲入2dd删除110和111两行内容,删除的内容在下面:
typedef intptr_t;
#define _INTPTR_T_DEFINED
删完后插入下面的内容:
typedef int intptr_t;
#define _INTPTR_T_DEFINED
#else
# ifdef HAVE_STDINT_H
# include
# elif HAVE_INTTYPES_H
# include
# endif
完成后这段的内容应该是:
if !defined(_INTPTR_T_DEFINED) && ZEND_WIN32
typedef int intptr_t;
#define _INTPTR_T_DEFINED
#else
# ifdef HAVE_STDINT_H
# include
# elif HAVE_INTTYPES_H
# include
# endif
#endif
保存退出.
vi +2094 eaccelerator.c
敲入16dd将这行及接下来的16行删除,删除的内容在下面:
}
/*
* Initialization on first call, comes from eaccelerator_zend_startup().
*/
if (eaccelerator_global_function_table.nTableSize == 0) {
zend_function tmp_func;
zend_class_entry tmp_class;
zend_hash_init_ex(&eaccelerator_global_function_table, 100, NULL, NULL, 1, 0);
zend_hash_copy(&eaccelerator_global_function_table, CG(function_table), NULL,
&tmp_func, sizeof(zend_function));
zend_hash_init_ex(&eaccelerator_global_class_table, 10, NULL, NULL, 1, 0);
zend_hash_copy(&eaccelerator_global_class_table, CG(class_table), NULL,
&tmp_class, sizeof(zend_class_entry));
删完后跳到2516行,敲入8dd将这行及接下来的8行删除,删除的内容在下面:
/*
* HOESH: on apache restart there was some
* problem with CG(class_table) in the latest PHP
* versions. Initialization moved to eaccelerator_compile_file()
* depends on the value below.
*/
eaccelerator_global_function_table.nTableSize = 0;
保存退出.
至此,对代码的修改已经完成.
三、编译环境的修改和设定
vi /usr/local/bin/php-config
将第16行:php_cli_binary=NONE这行后面的NONE改成php-fastcgi,完成后是:
php_cli_binary=php-fastcgi
将第17行:php_cgi_binary=NONE这行后面的NONE改成php-fastcgi,完成后是:
php_cgi_binary=php-fastcgi
将第19行:php_sapis="cli apache"这行改成:
php_sapis="cgi apache"
将第28行:php_cgi_binary="${exec_prefix}/bin/${program_prefix}php-cgi${program_suffix}${exe_extension}"这行改成:
php_cgi_binary="${exec_prefix}/bin/${program_prefix}php-fastcgi${program_suffix}${exe_extension}"
(其实就是加入了fast四个字母)
保存退出.
mkdir /var/www/pear
mkdir /var/www/pear/bin
cp /usr/local/bin/php-fastcgi /var/www/pear/bin
上面的步骤其实是强制使php工作在fastcgi模式下(eAccelerator这个软件要求必须是mod_php或者fastcgi环境),并把php-fastcgi拷贝到chroot环境下(安全因素).
vi +103 /usr/local/bin/phpize
为autoconf加入版本号,将这两行改成:
test -z "$PHP_AUTOCONF" && PHP_AUTOCONF=autoconf-2.59
test -z "$PHP_AUTOHEADER" && PHP_AUTOHEADER=autoheader-2.59
注意此处为开始准备环境时安装的autoconf版本号,请根据系统情况自行修改。
保存退出.
好了,eAccelerator所需的编译环境已经全部妥当。
四、安装eAccelerator
接下来的过程就是官方的过程了,很简单.
phpize
./configure
make && make install
等到上面的步骤完成,然后要修改php.ini文件,将eAccelerator的设置加进去.
vi /var/www/conf/php.ini
跳到最后,加入下面的内容:
extension="eaccelerator.so"
eaccelerator.shm_size="2"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
注意:上面eaccelerator.shm_size="2"这行是指定eAccelerator所用缓存的大小,我这里只指定了2M,你可以根据你的情况自行修改.这个缓存最大可以设置到128M.
保存退出.然后建立eAccelerator工作目录:
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
完成后用下面的命令验证安装是否成功:
php -v
php-fastcgi -v
如果在输出的部分能够看到包含eAccelerator的内容,就表示eAccelerator的安装基本成功.
然后手动重启web server,用浏览器访问:应该同样可以看到eAccelerator的提示信息.