php が相対ディレクトリで開けない問題の解決策: 1. 「絶対パス」を使用する; 2. 一般関数 import.php を定義し、「事前にファイルを自動的にインポートする」ように設定し、 php.ini に追加します。内容を「auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php"」に変更するだけです。
このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。
php 相対ディレクトリを開けませんか? PHP における require パスと include パスの問題の概要
相対パスとは、で始まるパスを指します。 , たとえば、
./a/a.php (相对当前目录) ../common.inc.php (相对上级目录),
絶対パスは、/ で始まるパス、または Windows の C:/ に似たドライブ文字です。フル パスは、何も指定せずに最終的なファイルを一意に決定できます。参照パスのアドレス。例:
/apache/wwwroot/site/a/a.php c:/wwwroot/site/a/a.php
. または / で始まらない、または Windows ドライブ文字:/ で始まらないパス (例:
a/a.php common.inc.php,
I)最初はこれも相対パス Path であると考えていましたが、PHP の include/require 包含メカニズムでは、このタイプのパスは で始まる相対パス処理とは完全に異なります。 require './a.php' と require 'a.php' は異なります。
これら 3 種類のインクルード パスの処理方法を分析してみましょう。 まず、結論を覚えておいてください。インクルード パスが相対パスまたは絶対パスの場合、include_path (include_path が定義されている) には進みません。 php.ini 環境変数で指定するか、プログラムで set_include_path(...) を使用してファイルを見つけます。
注: 以下の説明と結論はこの環境に基づいています: 仮定 A=http://www.xxx.com/app/test/ a.php では、次の説明は A への直接アクセスの場合であることを再度強調します。
相対パスには、ファイルの最終パスを決定するための 参照ディレクトリ が必要です。インクルード解決では、 ネストの階層数に関係なく、この参照ディレクトリは、プログラム実行エントリ ファイルが配置されているディレクトリです。 例 1
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
例 4:
A中定义 require '../b.php'; // 则B=[SITE]/app/b.php B中定义 require './c/c.php'; / /则C=[SITE]/app/test/c/c.php 不是 [SITE]/app/c/c.php
例 5
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require './c/c.php'; // 则C还是=[SITE]/app/test/c/c.php 不是 [SITE]/app/inc/c/c.php
例 6
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
3. 絶対パス
require '/wwwroot/xxx.com/app/test/b.php'; // Linux中 require 'c:/wwwroot/xxx.com/app/test/b.php'; // windows中
dirname(__FILE__) も絶対パス形式でディレクトリとして計算されますが、__FILE
__は Magic の定数であり、次の記述と同等であることに注意してください。 PHP ファイルが配置されている絶対パスであるため、 dirname(__FILE__) は常にこのステートメントが記述されている PHP ファイルの絶対パスを指し、このファイルが含まれて使用されるかどうかとは関係ありません。他のファイルによって。 例 1
A中定义 require '../b.php'; // 则B=[SITE]/app/b.php B中定义 require dirname(__FILE__).'/c.php'; // 则B=[SITE]/app/c.php
例 2
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require dirname(__FILE__).'/c.php'; // 则B=[SITE]/app/inc/c.php 始终跟B在同一个目录
結論: B が A に含まれて使用されているか、直接アクセスされているかは関係ありません
B如果 require dirname(__FILE__).'/c.php'; // 则始终引用到跟B在同一个目录中的 c.php文件; B如果 require dirname(__FILE__).'/../c.php'; // 则始终引用到B文件所在目录的父目录中的 c.php文件; B如果 require dirname(__FILE__).'/c/c.php'; // 则始终引用到B文件所在目录的c子目录中的 c.php文件;
4。 path
5. 解決策
の「参照ディレクトリ」は実行エントリファイルが置かれているディレクトリです "undetermined" パスも混同しやすいため、 最良の解決策は "絶対パス" を使用することです ; たとえば、b.php がどこにあるかに関係なく、b.php の内容は次のようになります。必須の場合は、b.phpのパスを参照します。 c.phpの$dir = dirname(__FILE__);
require($dir . '../c.php');
更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php" 更改配置项(可选)allow_url_include = On
import.php の次の設定内容は次のとおりです
function import($path) { $old_dir = getcwd(); // 保存原“参照目录” chdir(dirname(__FILE__)); // 将“参照目录”更改为当前脚本的绝对路径 require_once($path); chdir($old_dir); // 改回原“参照目录” }
このようにして、import() 関数を使用してファイルを要求することができます。それに含まれる「参照ディレクトリ」のレベル、それが現在のファイルです。
推奨学習:「
PHP ビデオ チュートリアル以上がphpの相対ディレクトリが開けない場合はどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。