php错误84015,编译PHP OCI8磨难记
在DELL 的Poweredge 840服務(wù)器上安裝了RedHat enterprise V3 Linux
操作系統(tǒng)。然后安裝Apache
2.0.59和PHP4.4.7,這兩個都是最新版的。編譯安裝Apache、PHP都很順利,沒有出現(xiàn)什么問題,畢竟操刀多次了。連接Oracle數(shù)據(jù)庫也正常,系統(tǒng)能運行起來。但是運行了一段時間后,發(fā)現(xiàn)系統(tǒng)不太穩(wěn)定,用著用著,就會發(fā)現(xiàn)點擊某個web畫面時,是個空白頁,無法打開該畫面,等一會兒再打開時又能正常打開了,沒有規(guī)律性。
經(jīng)過多天的不斷排查,發(fā)現(xiàn)Apache的error_logs記錄了多個重復(fù)出現(xiàn)的Notice錯誤:
*** glibc detected *** double free or corruption (out):
0x00000000019f4730 ***
*** glibc detected *** double free or corruption (!prev):
0x0000000001111d90 ***
*** glibc detected *** corrupted double-linked list:
0x0000000001111d50 ***
*** glibc detected *** free(): invalid next size (fast):
0x0969ef30 ***
[Mon May 08 09:41:51 2006] [notice] child pid 3065 exit signal
Aborted (6)
[Mon May 08 09:48:58 2006] [notice] child pid 4747 exit signal
Segmentation fault (11)
由于服務(wù)器CPU是Intel Xeon 3070
(3000系列)雙核64位的,而PHP是32位的程序,而Oracle10也是64位的,所以懷疑是PHP
OCI8庫的問題,與oracle
10g的接口有問題。而PHP源代碼包里帶的OCI8庫比較舊,需要下載最新的OCI8源代碼。
詳細的編譯步驟如下:(假定所有程序都在/opt目錄下)
(I)先安裝autoconf2.13,在后面需要用到,Linux系統(tǒng)本身帶的autoconf程序版本比這個新多了,但PHP就認(rèn)這個,沒辦法。如果用系統(tǒng)帶的新版本autoconf程序,執(zhí)行下面的
$./buildconf --force
時,系統(tǒng)會給出很多warning提示,安全起見,還是用重新編譯安裝這個舊版本的程序。
$tar xvfz autoconf-2.13.tar.gz
$cd autoconf-2.13
$./configure --prefix=/opt/autoconf
$make
$make install
$export PATH=/home/autoconf/bin:$PATH ##這樣才能先找到舊的這個程序
(II)編譯安裝Apache
$tar xfvz httpd-2.0.59.tar.gz
$cd httpd-2.0.59
$./configure --prefix=/opt/apache2 --enable-so
$make
$make install
(III)編譯PHP和OCI8
##先解壓源代碼
$tar xfvz oci8-1.2.3.tgz
$tar xfvz php-4.4.7.tar.gz
##開始編譯了
$cd php-4.4.7
$cd
ext?##進入ext擴展庫目錄
$rm -f oci8?##將舊的OCI8庫刪除掉
$mv /opt/oci8-1.2.3 ./oci8?##將新的OCI8庫src移到此ext目錄下,并且改名為oci8
$cd ..?##向上退出到php-4.4.7目錄下
##下面這步非常關(guān)鍵哦,必須將PHP舊的configure文件刪除掉,才會重新生成,
##當(dāng)時搞了一個晚上才找到這個關(guān)鍵步驟
$rm configure
##重新生成configure/configure.in等文件
$./buildconf --force
##編譯PHP的選項,可以根據(jù)需要自己增減
$./configure --prefix=/opt/php4 \
--with-apxs2=/opt/apache2/bin/apxs \
--with-config-file-path=/opt/apache2/conf \
--with-oci8=$ORACLE_HOME \
--with-gd --enable-ftp --with-zlib \
--enable-mbstring --enable-mbregex --with-gettext --with-gdbm
\
--enable-safe-mode --enable-bcmath --enable-calendar \
--enable-ctype --with-ftp --enable-magic-quotes
--enable-inline-optimization \
--with-iconv --with-xml --enable-exif
$make
$make install
到此,PHP和OCI8編譯安裝完成。在編譯PHP和OCI8之前,應(yīng)該將需要用到的Oracle環(huán)境變量都配置好,如下:
export ORACLE_BASE=/home/oracle10g
export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/Db_1
export ORACLE_SID=ora10g
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8
export NLS_CHARACTERSET=AL32UTF8
OCI8重新編譯后,系統(tǒng)運行很穩(wěn)定,apache的error_log中再沒有出現(xiàn)上面列出來的錯誤。前后花費了2個白天,一個晚上的時間啊。痛苦死,還好最后圓滿搞定,解決問題了。一句話,用革命的浪漫主義精神搞定PHP
OCI8的編譯!【2007/5/18】
總結(jié)
以上是生活随笔為你收集整理的php错误84015,编译PHP OCI8磨难记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中需要全部小写的是,下列哪些是J
- 下一篇: php如何定义的数位置,php如何实现不