ホームページ >バックエンド開発 >PHPチュートリアル >PHP: パスの要求とインクルードの問題
FILE は前処理された変数であり、実行前に処理され、ファイルがインクルードされる前に置換されています。
include を必要とするファイルの内容は実行時に処理され、そのコードは include ファイル の空間 (インクルード ファイルを基準とした相対パス) で実行されます。
../common のように、.で始まるパスを指します。 .inc.php (上位ディレクトリからの相対パス)、
c:/wwwroot/site/a/a.php
common.inc.php、
set_include_path(...) を使用してファイルを見つけます。
テスト環境の説明 注: 以下の議論と結論はこの環境に基づいています: A=http://www.xxx.com/app/test/a.php と仮定します。次の議論が直接的なものであることを再度強調します。 A ケースにアクセスします。 2. 相対パス: インクルード解析では、ネストされた包含レベルに関係なく、この参照ディレクトリがプログラムを実行するディレクトリになります。エントリーファイルA は require './b/b.php' を定義します // 次に B=[SITE]/app/test/b/b.php
B は require './c.php' を定義します / / 次に、C=[SITE]/app/test/c.php は [SITE]/app/test/b/c.php ではありません
例 2
A は require './b/b.php ' を定義します。 // B=[SITE]/app/test/b/b.php
B は require '../c.php' を要求します // C=[SITE]/app/c.php は [ SITE] ではありません; /app/test/c.php
例 3
A は require '../b.php' を定義します //次に B=[SITE]/app/b.php
B は require '../ c.php'; //C=[SITE]/app/c.php は [SITE]/c.php ではありません
A は require '../b. / 次に B=[SITE]/app/b.php
B は require './c/c.php' を要求します // 次に C=[SITE]/app/test/c/c.php Not [SITE]/ app/c/c.php
A は require '../inc/b.php' を定義します // B=[SITE]/app/inc/b を定義します
B は require ' ./c/c.php'; // その場合、C は [SITE]/app/inc/c/c.php ではなく =[SITE]/app/test/c/c.php になります
A は require '../inc/b.php' を定義します // 次に B=[SITE]/app/inc/b.php
B は require './c.php' を定義します // 次に C=[SITE] /app/test/c.php は [SITE]/app/inc/c.php ではありません
絶対パスは比較的単純で、混乱やエラーを引き起こしにくいです。ディスク上のファイルに。
require '/wwwroot/xxx.com/app/test/b.php'; // Linux の場合
dirname
(FILE) も絶対パスの形式でディレクトリとして計算されますが、FILE は Magic の定数であり、このステートメントが記述されている PHP ファイルの絶対パスと等しいことに注意してください。したがって、 dirname(FILE ) は常に、このステートメントが記述される php ファイルの絶対パスを指し、そのファイルがインクルードされているかどうか、他のファイルによって使用されているかどうかには関係ありません。
例 1
A は require '../b.php' を定義します // 次に B=[SITE]/app/c.php
例 2 A で require '../inc/b.php'; を定義する / すると、B=[SITE]/app/inc/c.php は常に B と同じディレクトリにあります
BIf require dirname(FILE).'/c/c .php'; // B ファイルが配置されているディレクトリの c サブディレクトリ内の c を常に参照します。 php file;
まず、 include_path で定義された include ディレクトリを使用して [不明なパス] を 1 つずつ実行します。既存のファイルが見つかった場合は、それを含めて正常に終了します。見つからない場合は、require ステートメントを使用して実行します。php ファイルが配置されているディレクトリは、[ で構成されるフル パスを連結するために使用されます。ファイルが存在する場合、インクルード ファイルは正常に終了します。そうでない場合は、インクルード ファイルが存在しないことを意味し、エラーが発生します。 未決定のパスは混乱しやすいため、お勧めできません。
5. 解決策
「相対パス」の「参照ディレクトリ」は実行エントリファイルが存在するディレクトリであり、「未定」のパスも混同しやすいため、「絶対パス」を使用するのが最善の解決策です。 "; たとえば、b.php の内容は次のとおりです。b.php がどこに必要であっても、b.php のパスは c.php を必要とする参照として使用されます。
$dir = dirname(FILE);
require($dir . '../ c.php');または汎用関数import.phpを定義し、「事前にファイルを自動インポートする」に設定し、php.iniで以下の設定を行う
設定項目の変更(必須) auto_prepend_file = "C:xampphtdocsauto_prepend_file .php"
import.phpの内容は以下の通りです
function import($path) { $old_dir = getcwd(); // 保存原“参照目录” chdir(dirname(FILE)); // 将“参照目录”更改为当前脚本的绝对路径 require_once($path); chdir($old_dir); // 改回原“参照目录” }
以上がPHP: パスの要求とインクルードの問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。