雖然問題解決了
但是在很多不理解的地方,懇請指教QQ
這問題竟然解了6小時差點吐血死亡...
問題是使用require 或 include 時有甚麼路近上的差別嗎?
問題描述
網站的前台跟後台的某個功能會固定連到,後台設定的一個資料夾
// 後台資料夾
backside.file
|
|
setringfunction.file
|
--- admin.file
| |--- admin.php
|
--- sendmail.file
| |--- sendmail.php
|
--- checkmail.file
|--- checkmail.php //這隻需要(require/include)sendmail.php
// 這兩隻檔案都會需要(require/include) checkmail.php
// 前台
index.php
member.php
checkmail.php 裡面
// 相對路近
include '../sendmail/sendmail.php';
這聽起來超簡單的!!
路徑一抓就好....
結果我自己被自己的觀念卡死
// 前台easy
// 從這個位置開始往下抓
include '/backside/setringfunction/checkmail/checkmail.php';
結果前台怎麼用怎麼錯
後台卻很正常...
// 後台admin.php
// 相對路徑
include '../checkmail/checkmail.php';
但我的觀念是前台去抓checkmail.php後再從這個檔案位置
去抓上一層的sendmail.file 裡的sendmail.php 檔案
這個觀念是錯的嗎??
同事跟我提這句
'因為對前台而言這不是上一層的檔案'
所以是因為用include 所以位置是以原本檔案為主這樣嗎?
意思是
例如 A.php include B.php include C.php 要從A的路徑去看C.php 而不是從B.php
觀念是這樣嗎?還是又錯了?
那假如是require 也是這樣看路徑嗎?
謝謝各位大神QQ
最後是這樣解決
// 後台資料夾
backside.file
|
|
setringfunction.file
|
--- admin.file
| |--- admin.php
|
--- sendmail.file
| |--- sendmail.php
|
--- checkmail.file
|--- checkmail.php //這隻需要(require/include)sendmail.php
// 後來改成這兩隻檔案(require/include) 這一層的checkmail.php
// 前台
index.php
member.php
sendmail.file
|--- sendmail.php
checkmail.file
|--- checkmail.php //這隻需要(require/include) 同一層sendmail.php
checkmail.php 裡面
// 以為是相對路近但卻是從這裡開始往下抓
include '/sendmail/sendmail.php';
因為前台的 checkmail.php 裡面明明相對sendmail.php 因該也是include '../sendmail/sendmail.php';
但卻只要寫 '/sendmail/sendmail.php'就好所以想是不是
路徑位置是以要原本檔案為主
相對路徑的問題。
require 跟 include 的對應路徑解釋都是大同小異。
比較擔心的是 include 又 include的問題。
畢竟當第一個 include 時的目錄是在不同的地方呼叫。
則當include的檔案又有一個include。
就有機會發生路徑的問題。
依以下範例為例
A.php
test/B.php
ccc/ccc.php
ccc/ddd/ddd.php
A.php
<?php
include 'ccc/ccc.php';
?>
test/B.php
<?php
include '../ccc/ccc.php';
?>
ccc.php
<?php
include 'ddd/ddd.php';
?>
A跟b include 這個ccc相對路徑,本身並沒有問題。
可是ccc中又include一個ddd。這時這邊的解釋路徑就會不一樣了
a的話沒問題。因為a本身是在根目錄下。所以當載入ccc的同時。其所屬路徑就會是
ccc/ddd/ddd.php
但b的話,雖然在載入ccc沒問題。
可是當載入ddd是用
test/ddd/ddd.php 這個路徑讀取。當然會出錯。
一般正統的作用是會宣告一個根路錄的實體位置。
或是將ccc.php中的共用include。改成如下
<?php
include dirname(__FILE__).'ddd/ddd.php';
?>
這樣子就可以確保是用ccc.php的路徑來去讀取ddd.php。
那個我照著大大的講解的在做一次
可是一開始是有錯誤的...但是又突然沒有錯誤了QQ
開始不是很懂出錯的點了
載入B.php時會正常...
本來會報錯的,但現在不會,可是我看不出來哪裡有差...
也使用清除快取再重新載入了
apache也重新開關跟重新啟動了
依舊不能成功出錯QQ (會正常顯示OK)
求大神賜教
A.php
B.file
|---- B.php
C.file
|--- ccc.php
|--- ddd.file
|--- ddd.php //echo 'OK';
// A.php
include 'C/ccc.php';
// B/B.php
include '../C/ccc.php';
// C/ccc.php
include 'ddd/ddd.php';
不好意思請問一下
但b載入ccc是可以的
正常載入ddd是不可行的(雖然我試時可以??)
但不是很懂 test/ddd/ddd.php 這個路徑開頭test怎麼來的
因為想說先引用ccc.php 一開始是'../' 上一層
請教大神,感激不盡
我上面的範例,b是放在 /test 內的。
簡單來說,如果相對路徑的情況。基本都是依第一個運行的php路徑為主。
所以我的a.php的路徑是在 /
但我的b.php路徑則是在 /test
當開始 include 就會開始發生路徑問題。
畢竟起始路徑不同。
你好!
不好意思再請問一下
B.php include C.php
運行第一個php檔案是B
所以是路徑會是 /test/ddd/ddd.php 後面是ccc.php檔案
然後因為test檔案裡沒有ddd資料夾所以會出錯
但我目前路徑位置也是 /test/ddd/ddd.php
卻可以成功include?
A.php是在根(/)目錄下面
而B.php是在跟目錄下的/test檔案裡
是這樣嗎?
謝謝大大