今天嘗試使用 PHP - IMAP 系列的函數,發現一件很離奇的事,那就是我已經設定好 php.ini 了,在 command mode 下也都能正常執行起來,偏偏想在 Apache Web Server 執行時,依舊蹦出 Call to undefined function imap_open !

我已經很確定有設定好下面幾個步驟

  • 設定 php.ini 中 extension_dir 值,採絕對位置
  • 啟用 imap extension ,即拿掉註解 extension=php_imap.dll

以上步驟使得我在 command mode 上一切正常,但讓我疑惑的是為什麼 Web Server 一樣不正常?最後恍神一會,我才想到要看看 phpinfo() 的資訊,一看才發現 Apache Web Server 吃的 Loaded Configuration File 並不是我設定的位置,呼。沒想到竟然會是這種問題。

原先是我 PHP 跟 Apache Web Server 分開安裝的,所以一直沒成功也不覺奇怪,後來嘗試 Appserv 的方式,接著自己會在 Appserv\php5 目錄中建 php.ini 出來,發現還是一樣不行,最後仔細去看 phpinfo() 才發現 Web Server 吃的 php.ini 的位置不同,發現是落在 C:Windows\php.ini ,更正確地說法是作業系統安裝的目錄中。

在網路上查資料後,決定設定 PhpIniDir 來解決!最後也才發現,原來 Apache Web Server 一開始在找 php.ini 設定檔時,會有以下的順位,資料來源 Apache 配置参数之 PHPIniDir

  1. PhpIniDir
  2. 註冊資料 HKEY_LOCAL_MACHINE->SOFTWARE->PHP->IniFilePath
  3. 環境變數 PHPRC
  4. PHP5 根目錄 (For CLI) 或 WWW 根目錄 ( For SAPI moudles )
  5. Windows 目錄

其中 PhpIniDir 的設定是在 httpd.conf 中,嘗試的結果是必須在 LoadModule php5_module 前就設定好,可能跟我使用 PHP 的環境與方式有關吧?我一開始找到的 PhpIniDir 的設定資訊: Apache 使用 mod_php 讓 VH 有獨立的 php.ini 檔

我覺得這是很特別的經驗,以前在安裝這類服務時,總記得是在設定與編譯軟體時去指定安裝的目錄資訊,鮮少在 httpd.conf 加以設定,算是有摸索到東西囉。


全站熱搜

changyy 發表在 痞客邦 留言(2) 人氣()