ホームページ >バックエンド開発 >PHPチュートリアル >PHPの絶対パスと相対パスの関係の解析_PHPチュートリアル

PHPの絶対パスと相対パスの関係の解析_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:40:261069ブラウズ

php中好像不能像asp那样用“/”表示根目录,代之以$_SERVER['DOCUMENT_ROOT'],其它则相同:../表示向上一层。./表示当前层。假如现在a/b/c/s.php要调用根目录下的 /bb/s2.txt,则:

$RootDir = $_SERVER['DOCUMENT_ROOT'];
$fireDir = "$RootDir/bb/s2.txt";

或者:“../../../bb/s2.txt”表示向上返回到b再向上到a再向上到根目录然后到bb下。

前一阵子老是受php开发中,文件互相引入require()相对位置关系的困扰,为了彻底弄清它们的关系,笔者做了个实验。

以下是实验图:

当前项目(project2)的绝对路径是:D:\www\php_case\Coucom_make。也就是我们当前项目的根目录root.
  
为了能更加清楚的表述不同级别的目录文件相互的引入问题,偶大胆将引用分成三种类型即:上级对下级的引用(简称上级引用,英文译为:superior to underling。简称(stou)).

下级对上级的引用(简称下级引用,英文反之便是)

平级引用或叫同级引用(英文:paratactic)。  
 
好了,我们明确了引用类型,下面我们来看不同类型引用它们有着什么样的规则。

我们先来说说上级引用:

看我们的实验图,在图中项目下分别有aa bb ee 三个同级目录和一个index.php文件,在bb下又有cc目录,cc下又有dd目录和cc.php ccc.php两个文件,同样dd下也包含一个dd.php文件。凡是上层对下层均属上级引用.

例如:index.php对于所有文件的引用:
   cc .php对dd.php的引用:
   ee.php对dd.php的引用:

大家仔细看一下目录结构,便会发现这三种引用虽然同属于上级引用,但它们又不完全相同,我把它分成两种情况:即在上级引用中存在两种引用情况:1.从属的上级引用(类如cc.php对dd.php,,因为这两个文件同属于cc目录)2.非从属的上级引用(类如index.php对于所有文件的引用和ee.php对dd.php的引用都属于这种情况因为它们与被引用的文件并没有一个共同的父目录,在能相对于站点根目录).

对于从属上级引用:

以下是在cc.php对dd.php的引用

require('dd/dd.php');

对于非从属上级引用:

以下是在ee.php中对cc.php的引用

require('../bb/cc/cc.php');

上記は上位の参照です。以下で下位の参照について学びましょう!同様に、下位層から上位層への参照は下位参照であり、下位カテゴリと非下位カテゴリに分類されます。下位下位参照の相対パスは、親ディレクトリをルート ディレクトリとします。次に例を示します。

Ttt.php による bbff.php への参照は、次の状況に該当します: require('../bb/cc/cc.php');

関連性のない下位参照は、Web サイトのルート ディレクトリに基づいています。例:

ccc.php の ee.php への参照: require('../../ee/ee.php');

上記は従属引用についての紹介です。最後に、水平引用またはピア引用について見てみましょう。実は、兄弟引用も従属兄弟引用と非従属兄弟引用の 2 つの状況に分けられます。

従属兄弟参照は非常に単純です: つまり、同じディレクトリ内の 2 つのファイルへの参照です

例: dd.php require('ttt.php');の ttt.php を参照してください。

非従属ピア参照: つまり、同じディレクトリ内にない 2 つのファイルへの参照 (共通の親ディレクトリはなく、Web サイトのみが親ディレクトリです)、レベルは同じです。例: aa.php 引用 ee.php require('../ee/ee.php');

上記は 3 種類の異なる状況での参照です。ネストされた参照に関連する問題もあります。

例:

ff.php は dd.php を参照し、dd.php は gf.php を参照します。 この場合、dd.php は従属参照内の非従属参照である gf.php を参照します。 this: require('. ./../../ee/gf.php'); ff.php の dd.php への参照は上位参照の下位参照です。 書き方は次のようになります。 ./cc/dd/dd.php' ); しかし、ff.php 内に gf.php ファイルが見つからないことがわかります。これを dd.php に記述する必要があります。 require('../ee/gf.php'); これが唯一の正しい書き方です。なぜでしょうか。ネストされた参照の場合、参照されるファイルの相対パスは、最終的な参照されるファイルに基づく必要があるためです。

要するに:

実際には、Web ルート ディレクトリをルート ディレクトリとして使用します。たとえば、ファイルには、すべてのファイルに含める必要があります。共通です.php

このファイルがルートディレクトリに配置されている場合

wwwroot/global.php

最初の行に chdir(dirname(__FILE__)); //global.php があるディレクトリに切り替えて、そのディレクトリをたどります

他のファイルによって使用されています

「../../../global.php」が必要;

「aa/aa.php」が必要; 以上です。global.php は既にパスを wwwroot に切り替えているので、多くの人ほど面倒なことをする必要はありません


define('ROOT_PATH',dirname(__FILE__));

ROOT_PATH が必要です....

chdir(dirname(__FILE__)); は実際に非常に簡単に使用でき、このファイルを相対位置でインポートするには、他のインポートされたファイルがそれに基づいているだけです。

http://www.bkjia.com/PHPjc/321391.html

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/321391.html技術記事 php では、asp のようなルート ディレクトリを表すのに「/」を使用することはできないようです。代わりに、$_SERVER['DOCUMENT_ROOT'] を使用します。他のものは同じです。../ は 1 つ上のレベルを表します。 ./ は現在のレイヤーを表します。 a/b/c/s.php が今必要な場合...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。