PHP 站點相對包含,路徑的問題解決方法(include,require)


以前看了,很多框架,基本上很少使用相對路徑包含。而一般很多做php web站點,喜歡用相對路徑。 認為這樣,無論目錄放到那里。 只要跟另外目錄關系一致。那么就不會出現問題。如果一個站點,一般都認為,如果用根目錄,經常會改變網站地址,覺得很不方便。其實,我們從各大常見框架里面會發現,基本上都是采用是絕對路徑方法。

  • 相對路徑帶來問題

我們有如下結構的目錄。

<web>(網站根目錄)
├<a>文件夾
│ │
│ └a.php
├<b>文件夾
│ │
│ └b.php
└test.php

 

 

如果b.php 包含a.php (include(“../a/a.php”)) ,然后test.php 包含b.php (include(“b/b.php”)) ,我們發現很奇怪問題。

首先訪問:b.php 可以正常訪問, 然后訪問test.php

image

發現,找不到 a.php了。 這里注意一個問題是:php 默認相對路徑都是以,被訪問頁面所在路徑為准的。無論一個入口頁面,里面包含多少文件,相對路徑,都是以這個頁面為准

如果訪問test.php 根路徑是:test.php,如果訪問b.php 相對路徑都以b.php 所在路徑為准。剛剛頁面test.php 包含了b.php,b.php包含了a.php. 所有包含都以test.php 為准的。

估計剛剛開始php學習朋友,經常遇到這個問題,而且發現經常出現一大堆警告影響大家學習的興趣。

  • 使用絕對路徑方法

各大開源框架基本上采用絕對路徑方法,這樣可以避免相對路徑因為包含訪問文件變了。基准路徑變化,讓包含出現錯誤了。 所以,我們看看常見方法。

首先將網站基准訂到一個固定文件。一般可以用下面方法實現。如:根目錄下面有個config.php文件。

<?php

define(‘Root_Path’,dirname(__FILE__));

__FILE__ 至的是當前腳本路徑,在那個腳步php里面調用該變量,它的值就是該腳步的絕對路徑。

然后,任何其它頁面,在做包含時候,只需要包含了該config.php后。

<?php

包含config.php…..

include(Root_Path.”/文件路徑”);即可

 

 

  • 使用絕對路徑好處

使用解決路徑好處除了可以在大型項目中,包含時候更准確定位到文件,不易產生錯誤外。還有另外一個好處,包含文件,性能會得到很大提升。

如果給一個相對位置包含,php查找該文件,一般會在set_include_path 函數,設置的所有路徑里面去搜索。 我們知道,要一個一個去嘗試,列舉目錄,然后查找文件。這直接會消耗大的IO。 也會消耗很多性能。 如果我們用絕對包含,直接就可以准確判斷出,文件是否存在。不會去set_include_path設置目錄去查找了。

以上問題,對於剛剛接觸到php大型項目開發,可能會很容易遇到。歡迎討論!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM