注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

有情况

学会慢生活,拥有平常心……

 
 
 

日志

 
 

Zend Optimizer加载失败问题解决  

2012-05-26 09:15:14|  分类: 网站相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

问题:Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so:  /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so: cannot restore segment prot after reloc: Permission denied
Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so:  /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so: cannot restore segment prot after reloc: Permission denied

        按照字面意思就以为是权限了,但是检查了没有什么差异,又以为是和之前装的eaccelerator冲突,于是又参照了这篇文章,未果。索性直接将eaccelerator去掉了,还是不行。

        后来又查了很多资料,结果发现是和selinux有关,去/etc/selinux/config下面selinux去掉disable后问题解决。

或是 selinux=disabled

#php -c /etc/ -v           //检查是否成功!


具体解决方法:

  1. 对于 php.ini文件路径有问题( 我的在 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

HP 5.2.5 (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

  Ok 正常 phpinfo()看到的当然也是一样的

  2. 调用库文件的问题

  有的时候还有一些情况下 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加载模块部分

   ( 我在 php -i 中显示 Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so: /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so: cannot restore segment prot after reloc: Permission denied

  看这个原来是权限问题)

  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/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so

  就可以。

还有一个最终的解决办法,就是使用低版本的php源代码来编译安装php.

  评论这张
 
阅读(187)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016