857
人物
linux 下的lighttpd不能加載zend Optimizer的解決方法
在 Fedora 10 安裝 lighttpd php5 mysql5 zend Optimizer前 3個均可以用 yum 進行安裝,很方便。
在 Fedora 10 安裝 lighttpd php5 mysql5 zend Optimizer
前 3個均可以用 yum 進行安裝,很方便。
而 zend Optimizer 需要下載解壓後,到解壓目錄輸入 # ./install.sh 就會出現界麵提示安裝。安裝後重啟 lighttpd卻沒有成功啟動 zend Optimizer 。
解決經過:
1. 開始認為是 php.ini 沒有設置好。 打目錄中找 #find / -name php.ini ,後發現網頁輸出 就有 Loaded Configuration File : /usr/local/Zend/etc/php.ini 顯示 php.ini 文件已被加載。
2. 是否 zend Optimizer 版本問題,安裝最新版還是不成功。
3. 在網絡查找解決方法多是說 php.ini 設置問題。最終將幾個方法總結才解決:
具體解決方法:
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.
最後更新:2017-01-04 22:34:35