PHPアプリケーションを開発するときは、構成ファイル、クラスライブラリ、テンプレートファイルなどの外部ファイルを含める必要があることがよくあります。コードの保守性と移植性を向上させるために、インクルードを合理的に設定することが特に重要です。 get_include_path()およびset_include_path()は、PHPが提供する2つの強力なツールであり、開発者は現在のスクリプトの挿入パスを動的に取得して設定できます。この記事では、これらの機能を使用して、さまざまなオペレーティングシステムのパスを柔軟に構成する方法を紹介します。
include_pathは、phpの構成項目であり、デフォルトのパスを定義して、解析するときにファイルを見つける、要求、その他の機能を見つけます。合理的なインクルードパスを設定することにより、ハードコーディングされた絶対パスを回避することができ、それによりプログラムの移植性が向上します。
php.iniを介したパスを含むデフォルトを設定するか、 get_include_path()およびset_include_path()を使用してコードで動的に動作することができます。
さまざまなオペレーティングシステムには、パスセパレーターの定義が異なります。
Windowsでは、パスはセミコロン( ; )で区切られています。
UNIX様システム(Linux、MacOSなど)では、パスはコロン( :)で区切られています。
したがって、クロスプラットフォーム開発では、正しいセパレーターを動的に使用する必要があります。 PHPは、実行中の環境に応じて正しいセパレーターを返すことができる一定のpath_separatorを提供します。
echo PATH_SEPARATOR;
// Windows 出力: ;
// Linux/macOS 出力: :
get_include_path()およびset_include_path()を使用して、さまざまなオペレーティングシステムのパスを含めるファイルを設定する方法を示す例を示します。
次のディレクトリ構造があるとします。
/project
│
├── lib/
│ └── MyLibrary.php
└── app/
└── main.php
main.phpにlib/mylibrary.phpファイルを含めます。
<?php
// 1. 現存在するのものを取得します include path
$currentIncludePath = get_include_path();
// 2. 新しいパスを構築します
$projectRoot = dirname(__DIR__); // 仮定 main.php 存在する app ディレクトリ内
$libPath = $projectRoot . '/lib';
// 3. 使用 PATH_SEPARATOR 新しいスプライシング include path
$newIncludePath = $libPath . PATH_SEPARATOR . $currentIncludePath;
// 4. 新しいものをセットアップします include path
set_include_path($newIncludePath);
// 5. ファイルを含めます
require_once 'MyLibrary.php';
?>
このようにして、ハードコーディングされたパスを回避し、パスセパレーターがあらゆるオペレーティングシステムで正しく識別されるようにします。
stream_resolve_include_path()は、実際にファイルを含める前に、現在のパスでそれを見つけることができるかどうかを検証できる実用的な関数です。
$file = 'MyLibrary.php';
if ($fullPath = stream_resolve_include_path($file)) {
require_once $fullPath;
} else {
die("書類 $file 見つかりません。");
}
これにより、パスエラーによって引き起こされる致命的なエラーが防止されます。
リモートサーバー( https://gitbox.net/resources/config.phpなど)から構成ファイルをロードし、異なる環境に従ってファイルをローカルに含めるかリモートで含めるかを選択してください。
<?php
$isLocal = file_exists('/path/to/local/config.php');
if ($isLocal) {
set_include_path('/path/to/local' . PATH_SEPARATOR . get_include_path());
require_once 'config.php';
} else {
include 'https://gitbox.net/resources/config.php';
}
?>
URLを介して導入する機能は、通常、生産環境でオフになるAlow_url_include設定に依存することに注意する必要があります。
get_include_path() 、 set_include_path() 、およびpath_separatorの合理的な使用により、さまざまなオペレーティングシステムと互換性のあるパス管理を実現できます。これにより、コードの移植性が向上するだけでなく、将来のメンテナンスと拡大のための優れた基盤もあります。実際の開発では、パス構成を中央に管理して、プロジェクト全体のファイルロードロジックを統合するために中央に管理することをお勧めします。