2013年2月28日 星期四
PHP 引入檔路徑的設定
在家裡用 Apache 建置好一個 virtual 網站,複製到公司後,網站建好了,但是卻發生資料庫找不到的問題。
每一支網頁(假設 index.php) 在開頭會引入一支檔案叫 function.inc ,放在網站根目錄的 libs 資料夾裡面:
require_once 'libs/function.inc';
然後這支檔案,會再去引入其它檔案:
require_once 'tb_List.php';
require_once 'variable.php';
結果在家裡都運作正常,在公司剛建好的網站卻一直說 1046:No database selected。
後來發現 php.ini 的設定不一樣。
家裡的 php.ini ,include_path 只有設這樣:
include_path = ".;"
但是公司的卻是設這樣:
include_path = ".;D:\www\xampp\php\PEAR"
所以公司的電腦,當它要找 config.php 時,它會先找最初那支檔案所在地開始找起,然後找 D:\www\xampp\php\PEAR ,再去找被引入檔自己的資料夾。
所以搜尋順序是:1 找根目錄的 config.php,找不到 2. 找 D:\www\xampp\php\PEAR ,看有沒有 config.php,還真的找到了,雖然 還裡的 C 是大寫(Config.php),但還是被當成要找的檔案。 3. 既然在上一步找到 config.php ,所以真正要找的資料夾就不去找了。
原來 PEAR 根目錄也有檔案叫 Config.php。目前是還沒用到 PEAR,哪天如果要用到的話,不就相衝突了。這篇文章說要把 . 放在後面,於是我這樣設
include_path = "D:\www\xampp\php\PEAR;."
結果系統直接去 PEAR 找 Config.php 。沒解決問題 ??
可以考慮在被引入檔使用 __DIR__,這個 PHP 預設的變數,不管被引入檔放在哪,它都會回傳被引入檔自己的路徑(例如 D:\www\xampp\website\libs\variables.php,而不是請求網頁的路徑 (例如D:\www\xampp\website\index.php)
而且一樣可以用 .. 表示上一層,例如 $path = __DIR__ . '/../libs/function.inc';
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言