怎样安装ZendOptimizer 3.3.9

2014年12月15日 | 分类: 【技术】

准备工作

1. 将 VPS Reinstall为 CentOS 6.5 64bit 纯净版

2. 更新系统内核到最新

yum -y update

3. 安装wget

yum -y install wget

获得LAMP一键安装包

因为时间久远,这个LAMP包诸多链接已失效,需要不断更正替换。

下载:http://centos.googlecode.com/files/lamp0.4.tar.gz
下载:http://down.51cto.com/data/500332
下载:链接:http://pan.baidu.com/s/1o8uGIzK 密码:3q79

tar xf lamp0.4.tar.gz && cd lamp0.4

注意:可以分析各个BASH命令,发现会首先判断系统中是否已经安装此程序,如果没有,才会下载安装。所以可以用这个规律进行排错。

安装LAMP

执行BASH命令:

chmod +x lamp.sh && ./lamp.sh

下载:http://download.csdn.net/download/woshinanjinren/4912990
下载:https://archive.apache.org/dist/httpd/httpd-2.2.22.tar.gz
下载:https://files.phpmyadmin.net/phpMyAdmin/3.5.1/phpMyAdmin-3.5.1-all-languages.tar.gz
下载:http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
下载:http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
下载:http://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
下载:http://downloads.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz

设置MySQL密码;选择第一种方案PHP 5.2.17(只有这个方案可以搭配ZendOptimizer 3.3.9)。

Please input the root password of mysql:
(Default password: root):dPC5FV4Mk^12z%8U
mysql password:
####################################
select which version of php you'll install
1) php-5.2.17 with httpd-2.2.22
2) php-5.3.13 with httpd-2.4.2
Please input 1 or 2:1
Your choice:php-5.2.17
####################################
select the mpm of apache
1) prefork (Recommend)
2) worker (Multi-threaded)
3) event (Multi-threaded,not support ssl.)
Please input 1,2,3:1
Your choice:prefork
####################################
Please input the mysql data location:
(leave blank for /usr/local/mysql/data):
mysql data location:/usr/local/mysql/data

Press any key to start...

报错:

checking for iconv support... yes
configure: warning: bison versions supported for regeneration of the Zend/PHP parsers: 1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 (found: 2.7).
configure: warning: flex versions supported for regeneration of the Zend/PHP parsers: 2.5.4  (found: 2.5.37)
configure: warning: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: Please reinstall the iconv library.

所以需要卸载/新安装相应程序:

1. bison版本过高:卸载当前bison 2.7,编译安装bison 2.4.1:

参考:https://amon.org/bison

2. flex版本太低:卸载当前flex 2.5.37,编译安装 flex 2.6.3:

参考:https://amon.org/flex

3. re2c没安装,那么yum安装:

yum install re2c

4. libiconv编译安装出错,早知道方法:

参考:https://amon.org/libiconv

重新执行BASH命令,发现PHP编译报错:

/root/lamp0.4/untar/php-5.2.17/ext/dom/node.c:1955:5: note: in expansion of macro ‘RETVAL_STRINGL’
     RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
     ^
make: *** [ext/dom/node.lo] Error 1

参考:http://blog.csdn.net/moqiang02/article/details/19699557

有一个补丁可以解决问题:

cd /root/lamp0.4/untar/php-5.2.17
curl -o php-5.x.x.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
patch -p0 -b < php-5.x.x.patch

再手动编译安装php-5.2.17:

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc
make ZEND_EXTRA_LIBS='-liconv'
make install

创建软连接:

ln -s /usr/local/php/bin/php /usr/local/bin/
ln -s /usr/local/php/bin/phpize /usr/local/bin/
ln -s /usr/local/php/bin/php-config /usr/local/bin/

重新执行BASH命令,发现启动httpd报错:

将Apache设成系统服务:

cp /usr/local/apache/bin/apachectl /etc/init.d/httpd

编辑 /etc/init.d/httpd,在第二行加入:

# chkconfig: 2345 85 15
# description: httpd is web server

把Apache添加到系统的启动服务组里:

chkconfig --add httpd && chkconfig --level 35 httpd on

设为开机启动:

chkconfig httpd on

重新执行BASH命令,发现启动httpd时找不到libphp5.so:

httpd: Syntax error on line 56 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot open shared object file: No such file or directory

那么重新编译安装PHP,让安装程序把libphp5.so放到这个目录。

cd /root/lamp0.4/ && tar zxvf php-5.2.17.tar.gz && cd php-5.2.17
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-iconv-dir=/usr/local -with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-mysql-sock --with-pdo-mysql
curl -o php-5.x.x.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
patch -p0 -b < php-5.x.x.patch
make ZEND_EXTRA_LIBS='-liconv'
make install

如果报错:

参考:http://www.cnblogs.com/zhanghw0354/archive/2012/09/23/2698951

这样在编译完成时看见:

Installing PHP SAPI module:       apache2handler
/usr/local/apache/build/instdso.sh SH_LIBTOOL='/usr/local/apache/build/libtool' libphp5.la /usr/local/apache/modules
/usr/local/apache/build/libtool --mode=install cp libphp5.la /usr/local/apache/modules/
cp .libs/libphp5.so /usr/local/apache/modules/libphp5.so
cp .libs/libphp5.lai /usr/local/apache/modules/libphp5.la
libtool: install: warning: remember to run `libtool --finish /root/lamp0.4/php-5.2.17/libs'
chmod 755 /usr/local/apache/modules/libphp5.so
...

重新执行BASH命令,看见成功信息:

...
PHP had been installed
============================phpmyadmin install============================================
mv: cannot move ‘untar/phpMyAdmin-3.5.1-all-languages’ to ‘/home/www/default/phpmyadmin/phpMyAdmin-3.5.1-all-languages’: Directory not empty
httpd: Could not reliably determine the server's fully qualified domain name, using ::1 for ServerName
httpd (pid 3227) already running
============================phpmyadmin install completed============================================
============================LAMP install completed============================================
mysql root password:dPC5FV4Mk^12z%8U
default web root:/home/www/default

中间httpd提示没有设置域名,下一步设置httpd.conf。

如果外网IP不能被访问,可能是因为iptables的原因。

如果是CentOS 7.0之后的系统:

输入:

service iptables stop

输出报错:

Redirecting to /bin/systemctl stop  iptables.service
Failed to stop iptables.service: Unit iptables.service not loaded.

原因是CentOS从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。所以你只要停止firewalld服务即可。
参考:《CentOS 7.2 (mini) 里iptables防火墙怎么关闭? 》

先停止服务,禁用服务:

systemctl stop firewalld.service && systemctl disable firewalld.service

输出:

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

查看状态:

systemctl list-unit-files | grep firewalld

输出:

firewalld.service                      disabled

安装ZendOptimizer

chmod +x zend.sh && ./zend.sh

参考:http://www.cnblogs.com/lpfuture/p/6014827

32位:http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
64位:http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz

报错:

ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz [found]
============================ZendOptimizer install============================================
cp: cannot create regular file ‘/etc/php.d/zend.ini’: No such file or directory
============================ZendOptimizer install completed============================================

那么创建它:

cd /etc && mkdir php.d

然后运行BASH命令:

发现已经生成zend.ini文件,内容:

[zend]
zend_optimizer.optimization_level=15
zend_extension=/usr/local/Zend/lib/ZendOptimizer.so

把 php.ini 拷贝到

7. 安装XCache

chmod +x xcache.sh && ./xcache.sh

PHP5.3以上的版本不再支持Zend Optimizer,已经被全新的 Zend Guard Loader 取代。

Zend Optimizer的最终可自动安装的版本是 3.3.3。一路YES,OK和回车,安装就完成了。不需要另外编辑php.ini文件就可以正常工作了。

Zend Optimizer的最终版本是 3.3.9,但有改动,不需要安装。但是需要直接在php.ini文件里面引用.so文件。

安装Zend Optimizer 3.3.3

在命令行中执行命令(支持32位、64位):

wget http://wiki.diahosting.com/down/kloxo/zend.sh
sh ./zend.sh

zend.sh 源代码:

#!/bin/bash

mkdir /root/hostwiki_zend
cd /root/hostwiki_zend
wget http://wiki.diahosting.com/down/lnmp/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
for FILE in ./*.tar.gz; do tar xvf $FILE; done
cd ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp
mkdir -p /usr/local/ZendOptimizer/
cp ZendOptimizer.so /usr/local/ZendOptimizer/ZendOptimizer.so
rm -rf /root/hostwiki_zend


for DOMAIN in /home/httpd/*;
do
sed -i 's/zend_/;zend_/g' $DOMAIN/php.ini 2>/dev/null
cat 2>/dev/null >> "$DOMAIN/php.ini" << EOF
zend_optimizer.optimization_level=1
zend_extension="/usr/local/ZendOptimizer/ZendOptimizer.so"
EOF
echo "$DOMAIN/php.ini update!";
done

sed -i 's/zend_/;zend_/g' /etc/php.ini
cat >> /etc/php.ini << EOF
zend_optimizer.optimization_level=1
zend_extension="/usr/local/ZendOptimizer/ZendOptimizer.so"
EOF
echo "/etc/php.ini update!";

service lighttpd restart
service httpd restart

然后一路YES,OK和回车,安装完成。

如果你的服务器连接Zend.com官方下载服务器有问题,可以先用代理下载相应的安装包放在自己的服务器上;然后下载zend.sh,修改为新的路径后放在自己的服务器上。然后访问zend.sh即可。

注意,使用zend.sh时会下载到服务器上,改变安装包路径后,需要在下载目录那把早先的zend.sh删除。或者新版本增加版本号以区别。

安装Zend Optimizer 3.3.9

ZendOptimizer3.3.9 64位版

http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz

ZendOptimizer3.3.9 32位版

http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

1. 解压缩 Zend Optimizer安装包

tar -zxvf ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz
cd ZendOptimizer-3.3.9-linux-glibc23-x86_64

2. 在data文件夹中找到对应你的服务器上PHP版本(4.3.x, 4.4.x, 5.0.x, 5.1.x, 5.2.x)的ZendOptimizer.so。并把 ZendOptimizer.so 文件拷贝到 /usr/local/Zend/lib 。

3. 修改/usr/local/etc/php.ini 文件(从PHPINFO查看)

将zend.ze1_compatibility_mode设置成 On仅在PHP4下,如果您只安装了PHP5,建议不要修改,仍保持zend.ze1_compatibility_mode为Off状态,

找到:

zend.ze1_compatibility_mode = Off

修改为:

zend.ze1_compatibility_mode = On

添加2行:

zend_optimizer.optimization_level=15
zend_extension="/usr/local/Zend/lib/ZendOptimizer.so"

4. 重启Apache

service httpd restart

5. 查看PHPINFO

Zend logo This program makes use of the Zend Scripting Language Engine: Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies

Zend Optimizer配置文件中相关内容的含义:

例子:

  [Zend]
  zend_optimizer.optimization_level=15
  zend_extension_ts="C:\Program Files\Zend\lib\ZendExtensionManager.dll"
  zend_extension_manager.optimizer_ts="C:\Program Files\Zend\lib\Optimizer-2.5.5"
  ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  [Zend]
  zend_optimizer.optimization_level=1023
  zend_optimizer.encoder_loader=0
  zend_extension_ts="C:\Program Files\Zend\lib\ZendOptimizer.dll" 
zend_optimizer.optimization_level 《== 优化程度,这里定义启动多少个优化过程。
zend_optimizer.encoder_loader 《== 是否允许处理由Zend Encoder加密的PHP文件。
zend_extension_ts 《== 优化器所在目录。
zend_extension_manager.optimizer_ts 《== 优化器管理所在目录。

优化程度 zend_optimizer.optimization_level 详细解释

Zend Optimizer总共有10个优化过程,从理论上说开的越多性能越好。当然,理论和实际永远都存在着差距。优化过程开启的越多对性能消耗也相对也越大,Zend Optimizer的10个优化过程并不相同也就是说效果不是平均的。Zend公司定义的最高值(High模式)为15,这里15指的是开启1-4号优化程度。当然,很多朋友并不满足于此,毕竟最高也只开启4个优化过程连总数的一半都没有。各个优化过程的对应的数字代码(值)如下:

  不使用 0 < = 如果这样不如不装,还能节约点内存说!
  优化过程1(PASS1) 1
  优化过程2(PASS2) 2
  优化过程3(PASS3) 4
  优化过程4(PASS4) 8
  优化过程5(PASS5) 16
  优化过程6(PASS6) 32
  优化过程7(PASS7) 64
  优化过程8(PASS8) 128
  优化过程9(PASS9) 256
  优化过程10(PASS10) 512

以何种方式开启优化过程是通过这些数字代码(值)相加所得的和作为此参数的参数值来控制的。例如配置文件中zend_optimizer.optimization_level = 1023 , 这里的1023是优化过程1到优化过程10全部数字代码(值)相加得到的和,表示开启全部10个优化过程。刚才所提到的Zend公司定义的High模式值为15,15表示同时开启优化过程1-4。

加密代码支持 zend_optimizer.encoder_loader 详细解释

这个参数用来告诉Zend Optimizer是否去支持被Zend Encoder加密过的代码。默认情况下Zend Optimizer将支持加密过的代码。如果不使用被加密过的代码可以关闭此选项。这个功能牵扯到解包反码的过程,会导致系统负荷的加重。

这个参数的值只有两个 0 关闭, 1 开启。默认为1,推荐设置为0。

模块定位 zend_extension_ts 、zend_extension_manager.optimizer_ts 的参数就是Zend Optimizer相关模块在硬盘上的安装路径。

参考资料:

参考:http://www.ctohome.com/FuWuQi/f2/192
参考:http://www.linuxidc.com/Linux/2009-04/19260.htm
参考:http://baike.eepw.com.cn/baike/showedition/id/4544