我的網站目錄如下:
*********************************** ***************************
wwwroot //網站根目錄絕對路徑為: F:/wwwroot
-- folder_a // 資料夾A
file_a_a.php file_a_b.php file_a_c.php
-- folder_b // 資料夾B
file_b_a.php file_b_b.php file_b_c.php
-- index.php
******** ************************************************** ***
這個目錄層次已經很清楚了:
wwwroot為根目錄,下面有index.php檔案和folder_a,folder_b兩個資料夾
這兩個資料夾分別有3個php檔案
先來看index.php檔案的內容:
<?php require_once("folder_a/file_a_a.php"); echo "文件folder_a_a.php被包含成功"; ?>
再來看folder_a/folder_a_a.php檔案的內容:
<?php require_once("../folder_b/file_b_a.php"); $x = new X(); $x.printInfo(); ?>
最後再來看看folder_b/folder_b_a.php檔案的內容:
<?php class X{ function printInfo(){ echo 'success; } } ?>
ok 如果我現在直接執行floder_a/file_a_a.php
##那麼會輸出: success如果我運行wwwroot下的index.php那麼會報錯,原因是找不到包含檔案:file_b_a.php
但是如果我在所有的require_once()中加入dirname(FILE).'/'
那麼無論執行file_a_a.php 或index.php 都可以正常輸出********* ************************************************問題:我第一次使用的是相對路徑,所以重複包含的時候就出錯了而我第二次使用的是絕對路徑,所以不出錯.可是我還是有點疑惑:我先分析了以下使用相對路徑會出錯的原因:我運行index.php,它能找到folder_a目錄,也能找到該目錄下的file_a_a.php,於是它就把folder_a/file_a_a.php 裡的內容複製到了index.php 的第一行(包含語句的那行),然後再繼續運行(也就是運行包含過來的內容),因此此時等於是在index.php中運行file_a_a.php 中的require_once('../folder_b/file_b_a.php'); 它根據當前index.php的位置去找這個路徑文件(file_b_a.php),當然找不到啦,所以它出錯了.可是我使用絕對路徑的時候不是一樣的道理嗎?可為什麼它就不出錯?可能這句話大家有點不解了,我來詳細說明(根據程式的運作順序來說明).程式先執行index.php(注意此時我加上了dirname(FILE),所以目前是絕對路徑),#index.php先執行第一句程式碼:require_once(dirname(FILE).'/'.'folder_a/file_a_a.php');dirname(FILE) 是f:/wwwroot/ 所以這句程式碼包含的路徑也是:f:/wwwroot/folder_a/file_a_a.php這個路徑是正確的,因此沒問題是吧ok 第一步正確完成#然後它就把file_a_a.php 中的程式碼複製到的index.php 的這個地方:然後仍然繼續運行: 這是也就是在index.php 中運行file_a_a.php 中的所有程式碼,那麼我們來看看它運行那些代碼?<?php require_once(dirname(FILE).'/'."../folder_b/file_b_a.php"); $x = new X(); $x.printInfo(); ?>
<?php require_once(dirname(FILE).'/'."../folder_b/file_b_a.php"); $x = new X(); $x.printInfo(); echo "文件folder_a_a.php被包含成功"; ?>
folder_a/folder_a_a.php文件的内容这样写:
<?php require_once("folder_b/file_b_a.php"); $x = new X(); $x.printInfo(); ?>
你看下会不会错
在跟目录里建个文件,把要引用的文件全部按绝对路经引进来;其他目录引这个文件就好了.
以上是PHP關於require_once路徑問題的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!