ホームページ バックエンド開発 PHPチュートリアル php require_once の使用法と相対ディレクトリに注意する_PHP チュートリアル

php require_once の使用法と相対ディレクトリに注意する_PHP チュートリアル

Jul 13, 2016 am 10:56 AM
once php require そして 存在する 開発する 記事 使用法 目次 比較的 欲しい

この記事では、PHP 開発でよく遭遇する require_once の使用法を紹介しています。必要な方は参考にしてください。

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 はルート ディレクトリであり、その下にindex.php ファイルと 2 つのフォルダー (folder_a とfolder_b) があります

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

まず、index.php ファイルの内容を見てみましょう:

コードは次のとおりです コードをコピー

require_once("folder_a/file_a_a.php");

echo "ファイルfolder_a_a.phpは正常にインクルードされました";

?>

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

コードは次のとおりです コードをコピー

require_once("../folder_b/file_b_a.php");

$x = 新しい X();

$x.printInfo();

?>

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

今すぐ floder_a/file_a_a.php を直接実行すればOKです

その後、「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 の最初の行 (ステートメント行を含む行) にコピーします。その後、実行を継続します (つまり、含まれているコンテンツを実行します)。したがって、これは、index.php の file_a_a.php で require_once('../folder_b/file_b_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 内のすべてのコードを実行するため、どのようなコードが実行されるか見てみましょう。

コードは次のとおりです コードをコピー

クラスX{

関数 printInfo(){

️ echo 'success;

}

}

?>

コードは次のとおりですコードをコピー

require_once(dirname(__FILE__).'/'."../folder_b/file_b_a.php");

$x = 新しい X();

$x.printInfo();

?>

これらのコードはindex.phpにコピーされていることに注意してください。つまり、index.phpの内容は実際には次のようになります:

コードは次のとおりですコードをコピー

require_once(dirname(__FILE__).'/'."../folder_b/file_b_a.php");

$x = 新しい X();

$x.printInfo();

echo "ファイルfolder_a_a.phpは正常にインクルードされました";

?>

注意点を見てみましょう

次の 3 つのファイル c.php a.php b.php があり、対応するストレージ ディレクトリが localhost/localhost/localhost/demo であるとします。

コードは次のとおりですc.php

b.phpの内容はCLASS Aを継承しているのでさらに興味深いので、a.phpも導入してみました

コードをコピー

require_once("a.php");

require_once("demo/b.php");

B::demo();a.php
クラスA
{
}

コードは次のとおりです コードをコピー

require_once("../a.php");
クラス B は A を拡張します
{
パブリック静的関数demo()
{
エコー「xx」;
}
}

localhost/c.php を実行すると、システムは次のようなエラーを報告します
。 警告: require_once(../a.php) [function.require-once]: ストリームを開けませんでした: F:wwwdemob.php の 2 行目にそのようなファイルまたはディレクトリはありません
致命的なエラー: require_once() [function.require]: F:wwwdemob.php の 2 行目で、必要な '../a.php' (include_path='.;C:php5pear') を開くことができませんでした。 b.php の require_once ステートメントを削除すると、正常に実行されるので、定義された require_once ステートメントが多すぎるのでしょうか。理由は、クラス A が 2 回再定義されたためですか?しかし、そうではありません。 c.php に require_once(‘a.php’); を追加するだけなら、2 回書いても正しくなります。
その理由は、b.php で定義されたディレクトリ レベルが c.php 実行ファイルのディレクトリ レベルと一致せず、その結果、c.php に 2 つの require_once ステートメントが発生するためです。

と同等にする
コードは次のとおりです コードをコピー

require_once("a.php");
require_once("../a.php");
クラス B は A を拡張します
{
パブリック静的関数デモ()
{
エコー「xx」;
}
}
B::デモ();

原因が判明しました。c.phpでは相対ディレクトリ「..」がc.phpの上層にあるため、ファイルが見つからない場合にエラーが発生するためです。
したがって、PHP で require_once を使用する場合、異なる階層関係が存在するため、相対ディレクトリの使用には注意が必要であるという結論になります。


require_once の使用は非常に簡単ですが、使用する場合は絶対パスを使用するようにしてください。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632204.html技術記事 PHP開発でよく遭遇するrequire_onceの使い方を紹介していますので、困っている方は参考にしてください。 wwwroot //ウェブサイトのルート ディレクトリ、絶対パスは次のとおりです: F:/wwwroot --...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

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 は、

See all articles