2007/06/14

裝 PEAR 之後衍生 include path 的問題

今天幫一台 server 裝 PEAR,裝好之後本來的程式卻出現以下的錯誤訊息:

Fatal error: Call to undefined method: log_file->_format() in /usr/local/share/pear/Log/file.php on line 293

追蹤之後發現,原來這程式有用 PEAR 的 Log 套件(Log.php),並且使用 Log 套件的 file.php。
由於本來沒有裝 PEAR,因而將 Log 套件裝到該程式自己的目錄下自行引入。
安裝 PEAR 之後,原本的程式還是引入自己目錄的 Log.php,
但是 Log.php 去呼叫 file.php 時,
因為裝了 PEAR 之後 include path 多了 /usr/local/share/pear,
就變成引入 /usr/local/share/pear/Log/file.php。

沒有裝 PEAR 之前:
程式引入 /home/user/Log.php -> Log.php 引入 /home/usr/Log/file.php

裝 PEAR 之後:(include path 多了 /usr/local/share/pear)
程式引入 /home/user/Log.php -> Log.php 引入 /usr/local/share/pear/Log/file.php

/home/user/Log.php 是 1.9.3 版、/home/usr/Log/file.php 是 1.44 版,
而今天裝的 PEAR 的 Log 套件是 1.9.11 版、file.php 是 1.45 版。
在 1.45 版的 file.php 裡用到 Log 物件的 _format 方法,而這個方法 1.9.3 版的 Log.php 沒有,因此產生了錯誤訊息。
後續處理就把自行安裝的 Log 套件升級到 1.9.11 版(不用改程式)。

沒有留言:

張貼留言