今天嘗試使用 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:
- PhpIniDir
- 註冊資料 HKEY_LOCAL_MACHINE->SOFTWARE->PHP->IniFilePath
- 環境變數 PHPRC
- PHP5 根目錄 (For CLI) 或 WWW 根目錄 ( For SAPI moudles )
- Windows 目錄
其中 PhpIniDir 的設定是在 httpd.conf 中,嘗試的結果是必須在 LoadModule php5_module 前就設定好,可能跟我使用 PHP 的環境與方式有關吧?我一開始找到的 PhpIniDir 的設定資訊: Apache 使用 mod_php 讓 VH 有獨立的 php.ini 檔。
我覺得這是很特別的經驗,以前在安裝這類服務時,總記得是在設定與編譯軟體時去指定安裝的目錄資訊,鮮少在 httpd.conf 加以設定,算是有摸索到東西囉。
您好!
回覆刪除我作了個服務!
然後利用win 7的工作排成去執行這隻PHP!
當我用browser看這隻PHP時都會正常!
可是用工作排成執行時!
他就會說!
call to undefined function mb_strlen();XXXXXXXXXXXXXXXXX
可是我在php.ini裡也有把;拿掉!
不然在browser也不會正常執行!
而且在system32這個資料夾下也有丟php_mbstring.dll!
都還是會錯!
為什麼呢?
版主回覆:(04/15/2009 03:59:30 AM)
看起來有可能是環境變數的問題, 因為在 browser 執行時, 它可以拿到環境變數, 因此可以找到 php_mbstring.dll, 但如果用排程時, 有可能拿不到相關資訊囉
建議排程的部分用絕對路徑處理(可以都先寫在一個 *.bat 或 *.cmd 檔案內), 另外加上 -c 參數來指定 php.ini 位置, 且 php.ini 裡頭有一行 extension_dir 也請指定絕對位置給它(用來找php_mbstring.dll), 例如寫在 test.cmd 中:
C:\php\php.exe -c C:\path\php.ini test.php
然後排程再去跑 test.cmd 吧, 你可以先點選 test.cmd 看看有沒有成功囉, 以上是我猜測的, 暫時沒環境測試, 給你當作參考吧
ya!
回覆刪除我解決了:D!
是用-c!
謝謝你:D
版主回覆:(03/10/2010 05:06:07 PM)
恭喜恭喜 :D