linux安装zend,linux安装配置Zend Optimizer详解
linux安装Zend Optimizer很简单,首先确定自己的PHP版本(必须版本是小于5.3的)
PS: 查看系统PHP版本可以运行 php -v
一、下载安装
wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
tar -xzvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
./ZendOptimizer-3.3.3-linux-glibc23-i386/install.sh
基本上一路回车就可以了,安装会自动检测php.ini和apache的路径。
二、配置
#php -v 查看安装成功与否
问题:Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so:
/usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so: cannot restore segment protafter reloc: Permission denied
Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so:
/usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so: cannot restore segment protafter reloc: Permission denied
说明没有加载zend optimizer模块。
大概可能有三种情况:
1. 对于 php.ini文件路径问题(使用apache的 phpinfo()显示php.ini路径正确与否,一般不会有错 )
解决方法:
php -i | grep php.ini 就可以找到当前php使用的php.ini文件。
比如, 编译安装时没有指定php.ini存放路径, 那么默认php.ini会放在/usr/local/lib下面。最好是在编译PHP时指定PHP配置文件的路径 如: -with-config-file-path=/usr/local/etc。
而一般zend默认安装 php.ini在/etc/目录下面或/usr/local/Zend/etc 所以需要在安装的时候手工指定我们php.ini文件存放的位置。
如果不知道现在的PHP的配置文件具体位置的话 可以查看一下:
php -i | grep php.ini
如果php optimizer安装好了,却发现不能加载的话可以手工指定读取php.ini文件的位置。
然后php -c /etc/ -v
如果可以看到zend opt正确加载,那么做个连接就好了,连接到php默认读取的php.ini路径下面。
比如
ln -sf /etc/php.ini /usr/local/lib
[root@localhost /]# php -v
PHP 5.1.6 (cli) (built: Jan 22 2006 12:59:19)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
with Zend Extension Manager v1.0.9, Copyright (c) 2003-2006, by Zend Technologies
with Zend Optimizer v3.3.2, Copyright (c) 1998-2006, by Zend Technologies
正常了,phpinfo()看到的当然也是一样的。
2. 调用库文件的问题(一般是apache调用问题)
有的时候还有一些情况下 php -i 或php -v 在控制台下可以看到zend opt,但是 apache 执行phpinfo()的输出里面却看不到。
一般是因为 调用php的时候zend模块不能加载, 比如AS4里面 就是这样的。如as4下面默认的php安装后读取库文件的路径
是在/usr/lib下面,而php.ini文件中加载zend模块是在zend安装路径的lib目录中。比如/usr/local/Zend/lib,
这时apache在执行php时不能加载zend模块。所以在控制台里php -v 可以正常,但是apache却没有加载zend。
解决办法:
先把zend模块copy到/usr/lib里面 然后改一下php.ini里面zend加载模块部分。
3. 最恶心的SElinux问题(最常出现的权限问题)
SElinux导致PHP不能使用zend/lib下的库文件。所以,即便是做了link也不行。只能够拷贝库文件到有权限的目录,或者直接关掉SElinux。
但我已 在 /etc/selinux/config 的 SELINUX=disabled 关掉SElinux 还是不行, 再网络查询发现在你保证SElinux 被disable后,还执行下chcon -t texrel_shlib_t 命令:
如: chcon -t texrel_shlib_t /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so
(这个文件视具体执行文件)就可以了。
我的解决的情况是:
1. 关闭SElinux
2. 运行 #chcon -t texrel_shlib_t /usr/local/Zend/lib/Optimizer3.3.0/php-5.1.x/ZendOptimizer.so
就可以了。
4.更悲剧的问题
Apache2+PHP5不能加载Zend Optimizer的问题
安装没有问题,但是不能加载。到Apache的日志目录,查看error日志。可以看到一些报错信息:
PHP Warning: Zend Optimizer does not support this version of PHP - please upgrade to the
latest version of Zend Optimizer in Unknown on line 0
[Sat Apr 28 17:56:47 2007] [notice] Apache configured -- resuming normal operations
[Sat Apr 28 18:00:01 2007] [notice] SIGUSR1 received. Doing graceful restart
Failed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:
/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals
Failed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:
/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals
[Sat Apr 28 18:00:01 2007] [notice] Digest: generating secret for digest authentication ...
[Sat Apr 28 18:00:01 2007] [notice] Digest: done
[Sat Apr 28 18:00:01 2007] [notice] Apache configured -- resuming normal operations
[Sat Apr 28 18:04:15 2007] [notice] SIGUSR1 received. Doing graceful restart
Failed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:
/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals
Failed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:
/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals
Failed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:
/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals
Failed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:
/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals
[Sat Apr 28 18:04:16 2007] [notice] Digest: generating secret for digest authentication ...
[Sat Apr 28 18:04:16 2007] [notice] Digest: done
[Sat Apr 28 18:04:16 2007] [notice] Apache configured -- resuming normal operations
其中最突出的一条记录是:
PHP Warning: Zend Optimizer does not support this version of PHP -
please upgrade to the latest version of Zend Optimizer in Unknown on
line 0
还有一条突出的是:
/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals
Failed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:
原因分析
老实说,这个问题以前也没有遇到过。安装配置过不少Apache2+PHP5+ZendOptimizer,但是没有遇到这个情况。于是以
compiler_globals作为关键字,在google上搜索,找答案。后来找到一个来自Zend.com上的链接,进去后,得到了解答。
原文连接:
http://www.zend.com/forums/index.php?t=msg&goto=9604&S=
其中有一位朋友的留言,说明了问题:
i just notice that Zend Optimizer only support prefork mode.
Supported Web Servers:
Apache 1.3.x
Apache 2.0.x (Prefork mode only)
Apache 2.2.x (Prefork mode only)
IIS 5, 6
if you want to install Zend Optimizer ,hope this help you.
也就是说,导致
加载ZendOptimizer失败的原因,是因为编译安装Apache2的时候,指定了worker模式 --with-mpm=worker
,Apache2运行在线程模式下。而ZendOptimizer只支持进程模式。也就是Apache2的prefork模式
--with-mpm=prefork 。
于是查看当前的Apache2是否支持了worker模式:
# httpd -l
Compiled in modules:
core.c
worker.c
http_core.c
mod_so.c
果然,是支持worker模式。
解决办法
其实解决的办法很简单,只需要按照下面三个步骤进行,就可以了:
以 --with-mpm=prefork 参数重新编译安装Apache2
重新编译安装PHP
重新安装ZendOptimizer
在程序都重新编译安装完后,重启Apache,就可以了。
一些思考
所谓"鱼肉与熊掌,两者不可兼得",目前Apache2+PHP,ZendOptimizer就只支持prefork模式。两者之间只能由使用者自己根据自己的实际需求来抉择了。
希望zend尽快开发出支持Apache worker模式的ZendOptimizer吧。
linux安装zend,linux安装配置Zend Optimizer详解相关推荐
- Tomcat的安装与环境变量配置(图文详解)
Tomcat的安装与环境变量配置 首先说明一下我的电脑配置: Windows 7 专业版 64位操作系统 安装内存8G 四核处理器 一.Tomcat的下载与安装 1.进入Tomcat官网: https ...
- linux修改jdk文件保存,Linux下更换jdk和配置环境变量详解
不需要删除旧的jdk,安装新版本的jdk,再更新环境变量即可. Linux下安装jdk,步骤如下 1:下载jdk包:本章使用的为后缀为tar.gz的文件(不需要安装),如jdk-8u111-linux ...
- linux免安装mysql_linux上免安装版MySQL5.7.18的教程详解
1. 下载mysql 从官网下载mysql的压缩包 mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz 2 把下载的包上传到linux上,先安装下依赖包:Ubun ...
- python3.6安装教程-python3.6环境安装+pip环境配置教程图文详解
1.python安装可以跨平台 2.有两个版本2.7和3.6,第三方库适用2.7版,两个版本不兼容 windows安装: 第一种方法官网安装: 在官网下载安装包如图: 图下点击是默认下载32位所以我们 ...
- python详细安装教程环境配置-python3.6环境安装+pip环境配置教程图文详解
1.python安装可以跨平台 2.有两个版本2.7和3.6,第三方库适用2.7版,两个版本不兼容 windows安装: 第一种方法官网安装: 在官网下载安装包如图: 图下点击是默认下载32位所以我们 ...
- python3.6.0怎么安装pip_python3.6环境安装+pip环境配置教程图文详解
1.python安装可以跨平台 2.有两个版本2.7和3.6,第三方库适用2.7版,两个版本不兼容 windows安装: 第一种方法官网安装: 在官网下载安装包如图: 图下点击是默认下载32位所以我们 ...
- IDEA的安装、配置与使用详解
IDEA的安装.配置与使用详解 目录结构 IDEA的安装.配置与使用详解 一.IDEA介绍 1. Jet Brains公司介绍 2. IDEA介绍 3. IDEA的主要功能介绍 4. IDEA的主要优 ...
- CentOS7 安装配置FTP服务器详解
CentOS7 安装配置FTP服务器详解 1.FTP简介 ftp(File Transfer Protocol文件传输协议)是基于TCP/IP 协议的应用层协议,用于文件的传输,包括ftp服务器(或服 ...
- CentOS7 安装配置SFTP服务器详解
CentOS7 安装配置SFTP服务器详解 1.SFTP简介 SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protoc ...
- 只需五步学会Maven 3.6.1OR 3.6.3及其他版本的下载安装与配置【图文详解】
第一步,下载并解压缩包 第二步,配置两个环境变量 第三步,测试是否安装成功 第四步,指定本地仓库的路径 第五步,修改镜像仓库 第一步,下载并解压缩包 Maven官方下载地址:https://ma ...
最新文章
- 利用RGB-D数据进行人体检测 带dataset
- 青年生命科学论坛报告:扩增子和宏基因组数据分析与可视化流程—刘永鑫(北京210606)...
- python核心教程第二版答案_《python核心教程》课后题答案注解
- 通过域名,直接访问到网站主页
- 搜索旋转排序数组—leetcode31
- FAILED: ValidationFailureSemanticException partition spec {dt=2021-04-01} doesn‘t contain all (2) pa
- mybatis多表新增如何获取主键ID
- H264参数语法文档: SPS、PPS、IDR
- 前端学习(2868):vue3数据劫持解析3
- python 神经网络原理_神经网络理论基础及Python实现
- 随机生成彩票的shell脚本
- bat 调用class文件_[Golang实现JVM第五篇]静态方法调用的实现
- php.ini添加的变量读取,PHP5 在扩展里使用 INI 指令(直接添加和配合全局变量两种方式)...
- mysql发生系统错误5_[玩转MySQL之一]MySQL体系架构简介
- [uva11174]村民排队 递推+组合数+线性求逆元
- 逆向脱壳附加数据处理
- linux脚本取消空格,Shell去除空格和空行的方法
- 简单 PS CS6蒙版抠图技巧
- pandas获取全部列名_Pandas 整理列名
- 【问题】SQL远程过程调用失败