ホームページ バックエンド開発 PHPチュートリアル PHPのrequire_onceパス問題の詳細な説明

PHPのrequire_onceパス問題の詳細な説明

May 14, 2018 pm 04:24 PM
once php require について パス

私のサイトディレクトリは次のとおりです:

**************************************** ****** *********************

wwwroot //Web サイトのルート ディレクトリへの絶対パスは次のとおりです: F:/wwwroot

-- folder_a // フォルダ A

 file_a_a.php
   file_a_b.php
   file_a_c.php
ログイン後にコピー

--folder_b // フォルダ B

file_b_a.php
   file_b_b.php
   file_b_c.php
ログイン後にコピー

--index.php

************************* *********** ******************************

このディレクトリ階層はすでに非常に明確です。

wwwroot はルート ディレクトリで、その下にインデックス ファイルと 2 つのフォルダー (フォルダー a とフォルダー b) があります

これら 2 つのフォルダーにはそれぞれ 3 つの php ファイルがあります

まず、index.php ファイルの内容を見てください:

<?php
     require_once("folder_a/file_a_a.php");
     echo "文件folder_a_a.php被包含成功";
?>
ログイン後にコピー

folder_a/folder_a_a.php ファイルの内容を見てみましょう:

<?php
     require_once("../folder_b/file_b_a.php");
     $x = new X();
     $x.printInfo();
?>
ログイン後にコピー

最後に、folder_b/folder_b_a.php ファイルの内容を見てみましょう:

<?php
     class X{
          function printInfo(){
               echo &#39;success;
          }
     }
?>
ログイン後にコピー

ok 今すぐ floder_a/file_a_a.php を直接実行すると

その後出力は次のようになります: success

wwwroot

でindex.phpを実行すると、インクルードファイル:file_b_a.php

が見つからないため、エラーが報告されますが、dirname(FILE)を追加すると、エラーが報告されます。 .'/'

をすべてrequire_once()にすると、file_a_a.phpを実行してもindex.phpは正常に出力できます

******************* **************************** *******************

問題:

初めて相対パスを使用したため、繰り返しインクルードするとエラーが発生しました

2回目は絶対パスを使用したため、エラーはありませんでしたが、まだ少し混乱しています:

最初に分析しました。相対パスを使用する場合のエラーの理由は次のとおりです。

index.php を実行すると、folder_a ディレクトリが見つかり、このディレクトリ内に file_a_a.php も見つかるので、folder_a/file_a_a.php の内容がコピーされます。を、index.php の最初の行 (ステートメントを含む行) に追加し、その後実行を続ける (つまり、含まれているコンテンツを実行する) ため、この時点では、Inindex.php, run require_once('.. /folder_b/file_b_a.php') in file_a_a.php; もちろん、index.php の現在の場所に基づいてこのパス ファイル (file_b_a.php) が見つかりません。絶対パスを使用した場合も同じではないでしょうか? しかし、なぜ間違っていないのでしょうか? おそらく誰もがこの文について少し混乱しているので、(プログラムの実行順序に従って) 詳しく説明します。

プログラムは最初にindex.phpを実行します(この時点でdirname(FILE)を追加したため、現在のパスは絶対パスであることに注意してください)。

index.phpは最初にコードの最初の行を実行します:require_once(dirname(FILE))。 '/' .'folder_a/file_a_a.php');

dirname(FILE) は f:/wwwroot/ であるため、このコードに含まれるパスは次のとおりです:

f:/wwwroot/folder_a/file_a_a.php

これパスは正しいです。はい、問題ありませんね?

ok 最初のステップは正しく完了しました

次に、file_a_a.php のコードをindex.php のこの場所にコピーします:

その後、実行が続行されます。また、index .php では、file_a_a.php 内のすべてのコードが実行されるので、どのコードが実行されるかを見てみましょう。

<?php
     require_once(dirname(FILE).&#39;/&#39;."../folder_b/file_b_a.php");
     $x = new X();
     $x.printInfo();
?>
ログイン後にコピー

はい、それだけです。これらのコードは、index.php にコピーされていることに注意してください。つまり、インデックスになりました。 .php の内容は実際には次のようになります:

<?php
     require_once(dirname(FILE).&#39;/&#39;."../folder_b/file_b_a.php");
     $x = new X();
     $x.printInfo();
     echo "文件folder_a_a.php被包含成功";
?>
ログイン後にコピー

次に、プログラムの実行順序に従って上記のコードを分析します:

dirname(FILE) は f:/wwwroot である必要があります (これらのコードは現在実行されているため) Index.php、相対パスと同じ原理なので、index.php が配置されているディレクトリが取得されます)

その場合、含まれるパスは次のようになります: f:/wwwroot/../folder_b/file_b_a.php

次に、このパスが存在するかどうかを確認してみましょう。 file_b_a.php ファイルはどうでしょうか? f:/wwwroot/../folder_b は f: ドライブ文字の下のfolder_b ディ​​レクトリに戻っており、このディレクトリは存在しないため、答えはノーです。

しかし、実行結果には不満がありました 解決策、正しく出力されました

おそらく、相対パスでは、index.php には最初に file_a_a.php が含まれ、次に file_b_a.php を含むコードが実行されるため、ディレクトリは実行できません。そして、絶対パスを使用した後、index.php file_a_a.php をインクルードする前に、file_a_a.php は file_b_a.php を含むコードをすでに実行しているため、正しく出力されることに注意してください。 this: ファイルをインクルードします。実際には、インクルードされたファイル内のコードがコマンドがインクルードされている場所にコピーされます。この見方が間違っていても、最初にインクルードしてから実行することはできません。相対パスですが、最初に絶対パスを含めてください。理解できません。アドバイスをお願いします。(読んでいただきありがとうございます。質問が非常に長くなってしまいました。)長い時間かかるので、Ctrl+C Ctrl+V を使用しないでください。また、「API を参照するか、自分で資格を見つけてください」などと言わないでください。) ありがとうございます。

あまり複雑に考えないでください...

絶対パスを使用してください:

あなたの c:a.php

can

cite

d:b.phpあなたが誤解していることの 1 つは、FILE がメインの実行ファイルであるかどうかに関係なく、常に現在のファイルを指しているということです。インクルードされたファイル

つまり、相対パス../folder_b/file_b_a.phpを使用すると、最初にコピーされます。次に、アドレスを指定するときに、FILEを使用すると、最初に指定され、次にコピーされます。そうですか?

仮想ディレクトリを使用する場合、このディレクトリは現在実行しているファイルに基づきます

つまり

folder_a/folder_a_a.php文件的内容这样写:

<?php
     require_once("folder_b/file_b_a.php");
     $x = new X();
     $x.printInfo();
?>
ログイン後にコピー

你看下会不会错

在跟目录里建个文件,把要引用的文件全部按绝对路经引进来;其他目录引这个文件就好了.

以上がPHPのrequire_onceパス問題の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles