Php路徑問題及其解決方法

2021-05-22 16:39:20 字數 3163 閱讀 4547

初學php的時候,我們經常被php的絕對路徑和相對路徑弄的暈頭轉向。路徑問題經常導致include及require命令不能載入到指定的頁 面,從而導致web程式執行錯誤。本文將跟大家一起**一下php路徑問題的常用解決方案。­

下面我們先做乙個個簡單的示例:­

上圖是乙個簡單web專案的結構圖,其中各檔案的**如下: ­

root/index.php : ­

<?php ­

$blog=new blog();­

echo $blog->getbloginfo();­

<?php ­

require_once 『../lib/smarty/functions.php』;­

<?php ­

class blog­

public function getbloginfo()­

return 『this is a test of blog!』;­

<?php ­

檔案載入成功,沒發生任何警告或錯誤。­

接下來,我們在瀏覽器中請求如下**:http://localhost/root/index.php,瀏覽器顯示出如下錯誤信 息:­

找到了問題所在,接下來,我們就來尋找解決問題的辦法:­

1.將所有檔案放在乙個資料夾下­

將所有檔案放在乙個資料夾下,那麼就不會存在路徑問題了。但是,這絕對是個餿主意!!除非你寫乙個小的不能再小的專案,不然請不要嘗試這種方法,沒 有結構的系統太可怕了!­

2.使用絕對路徑­

注:php中的include和require使用的是檔案系統的絕對路徑,如「c:/wwwroot /yourproject/index.php」­

將前三行由 ­

<?php ­

require_once 『../lib/smarty/functions.php』;­

修改為: ­

<?php ­

require_once 『t://study//php_rel//projects//root//lib//smarty//functions.php』;­

現在,我們訪問:http://localhost/root/index.php ,瀏覽器顯示:­

this is a test of blog!­

程式執行成功了。­

step2:雖然程式不報錯了,但很明顯,我們並沒有真正的解決問題。沒有人會在程式裡寫require_once 『t:/study/php_rel/projects…functions.php』這樣的東西,這樣寫將會使程式完全喪失靈活性,使程式難以移植!­

將前三行由 ­

<?php ­

require_once 『t://study//php_rel//projects//root//lib//smarty//functions.php』; ­

修改為: ­

<?php ­

require_once dirname(__file__).『/』.『../lib/smarty/functions.php』; ­

再次訪問http://localhost/root/index.php程式執行正常,但這種解決 方式很明顯優於step1中的解決方式。應該說,這是一種"絕對路徑+相對路徑"的解決方 式。­

step3:上面的方法已經能夠解決路徑問題,但感覺**不夠優雅。讓**更優雅,我們可以這樣做:在根目錄(root)下新建乙個 settings.php: ­

root/settings.php :[/b] ­

<?php ­

if(!defined(abspath)) ­

define(『abspath』,dirname(__file__).『/』);­

<?php ­

require_once abspath.『lib/smarty/functions.php』; ­

同時root/index.php中的**修改為:­

<?php ­

require_once 』settings.php』; ­

$blog=new blog();­

echo $blog->getbloginfo();­

:在wordpress中使用了abspath與dirname(__file__).『/』.『相對路徑』 相結合的方法,從**統一入口(根目錄/index.php)載入的檔案,使用abspath的解決方法(abspath在根目錄/wp- config-sample.php 中定義),而那些不直接通過統一入口訪問的php檔案,wp使用 dirname(__file__).『/』.『相對路徑』的解決方案。­

3.設定apache的include_path引數­

在前面的錯誤資訊中,有一句值得我們注意: ­

apache的include_path引數儲存的是require/include的讀取目錄,在上面的錯誤資訊裡,include_path包 含了兩個位置:­

1) "."表示從當前檔案所在的目錄中載入­

2) "c:/php5/pear"表示從c盤的php5/pear目錄下載入。­

php函式庫為我們提供了set_include_path()函式用於設定include_path引數。通過 set_include_path()函式,我們可以自定義載入位置(zendframework中就是使用set_include_path()函式來 解決路徑問題)。­

下面我們來演示一下如何用set_include_path()函式:­

root/index.php :­

<?php ­

set_include_path(『./』.path_separator.dirname(__file__)); ­

$blog = new blog();­

echo $blog->getbloginfo();­

<?php ­

require_once 『lib/smarty/functions.php』;­

<?php ­

class blog­

public function getbloginfo()­

return 『this is a test of blog!』;­

<?php ­

.htaccess檔案 實現)。­

當然,解決php路徑的方法不止以上幾種,網上有很多人提供了針對php路徑問題的解決方案,但多數都有一定的適用場景,不能生搬硬套。

Php路徑問題及其解決方法

初學php的時候,我們經常被php的絕對路徑和相對路徑弄的暈頭轉向。路徑問題經常導致include及require命令不能載入到指定的頁面,從而導致web程式執行錯誤。本文將跟大家一起 一下php路徑問題的常用解決方案。下面我們先做乙個個簡單的示例 root index.php blog new b...

Php路徑問題及其解決方法

php路徑問題及其解決方法 php相關,原創 05月 20th,2008 初學php的時候,我們經常被php的絕對路徑和相對路徑弄的暈頭轉向。路徑問題經常導致include及require命令不能載入到指定的頁面,從而導致web程式執行錯誤。本文將跟大家一起 一下php路徑問題的常用解決方案。下面我...

常見系統問題及其解決方法

一 宕機問題 什麼是宕機 指在正常使用計算機過程中,顯示畫面定格,滑鼠沒有反應,鍵盤沒有反應。按滑鼠按鈕或者鍵盤按鍵並鬆開後,大約30秒以上沒有反應。宕機原因 1 軟體死鎖 軟體bug引起軟體執行時發生死鎖或者多個軟體之間爭用資源引起執行中的死鎖 在配置低的機器上執行大型軟體,常常會發生宕機 軟體與...