php的oci_connect偶爾出現OCIEnvNlsCreate fail和缺失LD_LIBRARY_PATH的處理辦法
使用php+oracle已經好幾年了,不管是apache+php,還是nginx+fastcgi+phpfpm,每隔幾天或者幾周時間,伺服器會出現php執行錯誤,資訊如下:PHP Warning: oci_connect() : OCIEnvNlsCreate() failed. There is something wrong with your system - please check that LD_LIBRARY_PATH includes the directory with Oracle Instant Client libraries in ...
意思是LD_LIBRARY_PATH的變數缺失了,導致oracle的庫檔案找不到。但是為什麼執行好好地,然後突然就有這個錯誤了呢,一直搞不明白,只能把它當做php的一個bug了。
[@more@]後來google baidu找了下,也有人有同樣問題,有人的處理方法是LD_LIBRARY_PATH在web服務啟動的時候載入進去。
我找了下apache2在bin目錄下有個envvars的檔案,此檔案正好在apachectl會被呼叫,就是設定環境變數的,開啟envars檔案可以看到
LD_LIBRARY_PATH="/usr/local/apache2/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
那麼我把他改成
LD_LIBRARY_PATH="/usr/local/apache2/lib:/usr/local/instantclient_10_2:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
看起來apache啟動的時候LD_LIBRARY_PATH就包含了oracle庫目錄了,事實也是如此,如果用phpinfo檢視的時候,可以看到environment裡面的LD_LIBRARY_PATH確實是我們設定的樣子。
不過這樣子修改後,錯誤還是照樣發生了。然後繼續尋找原因,有人說需要在httpd.conf檔案裡面設定:
SetEnv LD_LIBRARY_PATH /usr/local/apache2/lib:/usr/local/instantclient_10_2
LoadModule php5_module modules/libphp5.so
而且SetEnv一定要在load php module之前。
然後我照樣做了,然後在phpinfo裡面可以看到apache enviroment裡面的LD_LIBRARY_PATH也設成了想要的那樣。
按照這樣改後的好幾天,錯誤一直沒有發生!看來問題解決了。
上面是apache的處理方法,nginx下php-fpm的設定如下(php-fpm.conf):
......
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14663377/viewspace-1054566/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 處理資料缺失的結構化解決辦法
- 對偶理論和對偶單純形法——Python實現Python
- PowerShell的異常處理辦法
- 遭遇BUG 4483368出現ORA-19693錯誤後的處理辦法
- MySQL:雙主單寫 主庫偶爾出現大量延遲的原因MySql
- oracle rac修改ip的處理辦法Oracle
- oracle 表碎片太多的處理辦法Oracle
- QQ病毒的系列處理辦法(轉)
- mysql啟用skip-name-resolve模式時出現Warning的處理辦法MySql模式
- Python的時間、日期和時間戳的處理辦法Python時間戳
- 機器學習 第3篇:資料預處理(使用插補法處理缺失值)機器學習
- R缺失資料處理
- 磁碟IO過高時的處理辦法
- 使用 pq magic 8.0分割槽出現 Error 983 報錯資訊的處理辦法Error
- 升級oracle到10.2.0.3後出現ORA-01092的處理辦法Oracle
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- Pandas 基礎 (5) - 處理缺失的資料
- 機器學習中資料缺失的處理及建模方法機器學習
- 【譯文】R語言中的缺失值處理R語言
- php cli 中的使用curl 記憶體溢位時的正確處理辦法PHP記憶體溢位
- 網站執行PHP出現No input file specified 的解決辦法網站PHP
- mListView.setOnItemClickListener的函式失效的處理辦法。View函式
- oracle rac 其中第一個節點監聽偶爾中斷處理案例Oracle
- (轉)oracle redolog損壞的處理辦法Oracle Redo
- 英特爾和amd處理器哪個好 2022辦公打遊戲英特爾和amd處理器怎麼選擇遊戲
- 解析對偶理論與對偶單純性法
- em 出現亂碼的處理
- html之間傳值,如果有中文會出現亂碼處理辦法HTML
- 遭遇另類無法刪除病毒的處理辦法(轉)
- 資料分析缺失值處理(Missing Values)——刪除法、填充法、插值法
- PHP錯誤處理和異常處理PHP
- asm管理的dg資料檔案缺失的處理方法ASM
- 伺服器被攻擊的基本處理辦法伺服器
- asp 網站被 sql 注入後的處理辦法網站SQL
- direct path read wait event 的處理辦法AI
- ORA-19693錯誤後的處理辦法
- Thread 1 cannot allocate new log 的處理辦法thread
- flash recovery area 空間滿了的處理辦法