1

../PHPでも同じであるかどうかに興味があっ/../たので、これらを試しました:

require_once('/../frame/header.php');
require_once('../frame/header.php');

両方とも機能しました。私は運が良かったのでしょうか、それとも彼らは本当に同じことをしているのでしょうか? なんで?

4

2 に答える 2

11

あなたのコンテキストでは、両方が機能した場合、それはスクリプトがアクセスできるファイルシステムのルート、または 1 レベルにあることを意味します。しかし、それらは同じではありません! /../は、ファイルシステムのルート (および..1 つ上のディレクトリ、食べられてまだルートである) を../指し、現在のディレクトリよりも 1 つ上のディレクトリを指します。 で始まるパス/は、ファイルシステムのルートからの絶対パスです。

ファイルシステムのルート以外の場所からは、これらは同等に機能しません。

作業ディレクトリが/var/www/scripts.

require_once('../include.php');

にファイルが含まれます/var/www/include.php

しかし、同じ場所から

require_once('/../include.php');

...php はファイルシステムのルートでファイルをロードしようとしますが、/include.phpおそらく存在しません。

現在、多くの Web ホストは、ルート/が Web サーバーのドキュメント ルートでもあるファイル システムを提供します。Web サーバーのドキュメントルートは、 のようにルートから 1 つのディレクトリ レベルにすぎません/www。その場合、/../問題なく動作する可能性がありますが、ファイルシステム構成が異なる別のサーバーに移動しようとする場合は注意してください。

したがって、スクリプトの作業ディレクトリが/wwwであった場合、運が良ければ、これら 2 つは同じように機能します。

require_once('../include.php');
require_once('/../include.php');

どちらも/include.phpファイルシステムのルートにファイルを含めます。

これは PHP 固有のものではなく、..一般的に使用するファイルシステムのプロパティであることに注意してください...

于 2013-01-29T16:39:41.853 に答える
1

リンクの前に / が付いている場合は、現在のコンテキストのルートから移動していることを意味します。既にルート ディレクトリまたは chroot 監獄にいる場合、両方のステートメントは同じです。

于 2013-01-29T16:40:32.183 に答える