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';





沒有留言:

張貼留言