[請益] include 的路徑順序

看板PHP作者 (陸奧鬼一)時間16年前 (2009/06/23 20:39), 編輯推噓7(708)
留言15則, 4人參與, 最新討論串1/1
先說明檔案結構跟程式碼: ┬ a (目錄) │├ a.php │├ b.php │└ c.php c.phps.php s.php <?php include(a/a.php); ?> c.php <?php echo '<div>this is c.php</div>'; ?> a/a.php <?php include('b.php'); include('c.php'); echo '<div>this is a/a.php</div>'; ?> a/b.php <?php echo '<div>this is a/b.php</div>'; ?> a/c.php <?php echo '<div>this is a/c.php</div>'; ?> 接下來一樣是執行 s.php 狀況 1: c.php 存在,會產生這樣的結果: this is a/b.php this is c.php this is a/a.php 狀況 2: c.php 不存在,會產生這樣的結果: this is a/b.php this is a/c.php this is a/a.php 狀況 3: c.php 存在,把 a/a.php 改成 <?php include('./b.php'); include('./c.php'); echo '<div>this is a/a.php</div>'; ?> 會出現以下的結果: xxxx xxxx ←前兩行是找不到 b.php 的 warning 訊息 this is c.php this is a/a.php 如果要用相對路徑,想請問 include 的路徑是怎麼判定的? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.109.197

06/23 20:51, , 1F
記得以前實驗的結果是以最初include人的那個檔為準
06/23 20:51, 1F

06/23 20:55, , 2F
不過當時用的是require 不確定include有沒有差
06/23 20:55, 2F

06/23 23:58, , 3F
以最初的為準.而且還要考慮到include_path的設定問題
06/23 23:58, 3F

06/24 00:01, , 4F
在每個script裏加上echo getcwd()函式追蹤吧.或許可
06/24 00:01, 4F

06/24 00:01, , 5F
以抓出一些規則.
06/24 00:01, 5F

06/24 02:20, , 6F
怕跑掉用 __DIR__ 就好啦, 請查閱 Magic constants
06/24 02:20, 6F

06/24 09:04, , 7F
__DIR__ 在php5.3才有, 5.2要用 dirname(__FILE__)
06/24 09:04, 7F

06/24 11:55, , 8F
其實在php程式裏用include將其它php程式括進來是種常
06/24 11:55, 8F

06/24 11:56, , 9F
見的方式,但的確很容易引起路徑問題.因為對於一個要
06/24 11:56, 9F

06/24 11:56, , 10F
被include的php檔而言,它無法預設究竟會include它的
06/24 11:56, 10F

06/24 11:56, , 11F
php檔將是來自何處.
06/24 11:56, 11F

06/24 11:57, , 12F
所以另有一種常見的寫法是用'絕對路徑'來指示要
06/24 11:57, 12F

06/24 11:58, , 13F
include的檔在哪? 而將這個絕對路徑的根目錄定義在
06/24 11:58, 13F

06/24 11:58, , 14F
組態檔裏,並統一所有php檔都必須先讀取這個組態檔才
06/24 11:58, 14F

06/24 11:59, , 15F
行.這樣可以把路徑問題給單純化.
06/24 11:59, 15F
文章代碼(AID): #1AGCq55p (PHP)
文章代碼(AID): #1AGCq55p (PHP)