2017年3月31日 星期五

php 路徑

基本路徑的認識:路徑其實就是在電腦上的檔案所在位置的意思,可以想像成一般生活上的路標,把它想像成國道一樣,好比要到桃園市,不管你是由高雄或台中或其他縣市上了國道後,基本上沿著路標走,應該就不會迷路了。電腦內的路徑如同樹根,根狀圖如下:
addr_path
如上圖所示,test.com 是網站的根目錄,也就是網域中的最頂端,因此可以用 / 此符號標示,不管你在其下面任何一個資料夾下,只要給這個符號,它就知道要回到最上層的根目錄了。
舉例:
若你在 central(台中 中區)資料夾下,假設你有個檔案名為  a.html ,而你在根目錄下有個檔案名為 home.html 檔案,那麼由 home.html 假如要連結到 a.html 你只有二種寫法:
第一種直接以根目錄的連結方式:/taichung/ctntral/a.html
因此由 home.html 連結到 a.html 的語法就是
<a href="/taichung/ctntral/a.html">連結 a.html </a>
第二種就是以下級目錄連結方式:taichung/ctntral/a.html
因此也可以這樣寫
<a href="taichung/ctntral/a.html">連結 a.html </a>
這裡先說明三種符號的意思:
/  根目錄,既一個網域的最頂端
./      目前所在目錄
../     目前所在目錄的上一層目錄

我們把路徑的資料夾做一個局部放大圖:
root_tree_01

請詳細看看上方的圖解,此圖是預設該網域的名稱為 test.com(即 http://test.com/),進網站的第一層,即稱為根目錄,上圖中表示 test.com 根目錄下,有 2 個資料夾,本別為 taipei 及 taichung 另外有兩個頁面名為 page.html 及 home.html ,此為根目錄下第一層目錄,如果用網址來表示,就是如下:
http://test.com/taipei/ (taipei 資料夾)
http://test.com/taichung/ (taichung 資料夾)
http://test.com/home.html (home.html)
http://test.com/page.html (page.html)
以上四個視為同級目錄,只是兩個為目錄(資料夾)另兩者為檔案(頁面)(因為都在 test.com 根目錄下)
而 taipei 資料夾內又有兩個檔案 分別為 a.html 與 b.html
若home.html 要連結到 a.html 就必須先找到 a.html 所在的資料夾,再進入 a.html 所在的資料夾去找 a.html 頁面(或任何檔案),由上面的符號可得知:a.html 的上級目錄是 taipei 資料夾,因此我們必須由 taipei 資料夾進去找 a.html
由資料夾上下層符號則應該是這樣:
home.html 連到 a.html 的語法就是
./taipei/a.html (上面綠框有註明 同級必須使用 ./  而相同目錄下互連亦可忽略 ./ 符號) 所以就直接這樣寫:
taipei/a.html  因此加上超連結語法就變成
<a href="taipei/a.html">連結到 a.html</a>
反過來 如果由 a.html 想要連回 home.html 則必須先讓 a.html 回到 home.html 的同級目錄下再連結 home.html
因此 a.html 連到 home.html 便是:
../home.html
a.html 連到 home.html 的連結語法則是:
<a href="../home.html">連到 home.html</a>

這種上下連來連去的方式稱之為 相對路徑

請務必要能夠理解,相對路徑與絕對路徑(此路徑下面會再說明)不同的地方,寫 php 程式常常會用到。

我們在來看一下反連回上一層的圖示:
root_tree_02倘若你真的已理解了 相對路徑 的概念,上圖對你而言,應該很容易明白,有時寫程式是必須先建立起正確的概念,才能正確的完成程式碼唷!

現在我們來講解 絕對路徑,簡單的說 既然稱為絕對,那也就是說在任何地方都可以直接使用絕對路徑囉?我們來試看看!
測試之前請你先安裝 Apache 伺服器 ,並且建立起一網域,網址為 test.com (不會的請看 Apacher架設虛擬主機上篇 與 Apacher架設虛擬主機下篇),建立好後,確認 test.com 在電腦內的位置為 C:\AppServ\test.com 這裡,並且啟動 apacher 後能夠正確的瀏覽 test.com (在本機)

現在我們要開始以本機為實例,用php路徑來執行檔案了,我們在此以本機內已架設好的 test.com 網域做為練習網址,然後請建立好以下檔案及資料夾:
root_tree_03
對照以上的路徑,分別在上列各個 php 內加上一些簡單的判斷式,包括取得頁面的名稱等等方式,請自行將程式碼下載回去測試查看(範例檔案內有個判斷目前頁面的名稱的簡單方式)



在上面的例子中,比較容易混淆的是 當一 php 頁面 在 引入其他 php 到此 php 內使用時,那麼被引入的 php 內如果有使用到相對路徑時,此時的相對路徑基礎起點會是由 引入頁為計算基礎:
就好比上面例中,page.php 內的範例一樣,page.php 使用 include 指令 把 a.php 及 d.php 引到自身 page.php 使用時,則 a.php 及 d.php 上若是有使用到 相對或絕對路徑時,路徑的基礎會變成以 page.php 為基礎(請查看 page.php頁面的比較便明白)

上面的範例中,小學生解釋一下 / 此符號的意思,你要注意的是 / 此符號代表主機或網域的最頂端目錄,就是 假如是在程式當中使用,假設是虛擬主機好了,一般虛擬主機,往往一台虛主下面會放很多網站,而每個網站在本機的位置可能像是這樣:(在同一台主機下)
A網站:/home/www/a/public_html
B網站:/home/www/b/public_html
C網站:/home/www/c/public_html
如果你在 HTML 上使用 / 那會尋找到 最頂端 /public_html 此資料夾為 HTML 最頂端
但如果是使用程式,程式能夠偵測出本機的位置,所以程式中的 / 會是 /home 這裡
因此建議 若是使用 HTML 語法,則可使用 根目錄方式取檔
若是路徑是給php 使用的 ,則僅能使用相對路徑與絕對路徑了

另外 php 查尋目前頁面的絕對路徑指令為:
__FILE__;
可直接使用下面指令查尋:
目前頁面絕對路徑所在資料夾的位置為:
__DIR__;
可使用指令直接顯示:
還有下面指令是 列出 目前程式碼所在頁面的行號數為何:
__LINE__;
使用範例:

其他有用的一些涵數:
遍歷資料夾涵數:

引用資料來源:https://scriptmarks.com/php-路徑/

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。

cas server 一直圈圈或取得狀態異常

重點: cas server 不能開 VPN,會造成取的來源 dns 異常,會一直轉圈圈或等很久。