PHPでは、 get_include_path()とis_readable()は2つの非常に実用的な関数であり、ファイルの包含およびアクセス許可判決を扱うときに特に重要です。この記事では、これら2つの機能を組み合わせて使用して、 include_pathで指定されたパスにファイルが存在し、読み取り可能なアクセス許可があるかどうかを判断する方法について説明します。
get_include_path()は、 currentを返すパス(_pathを含む)を返す組み込み関数です。含まれるパスは、含まれるファイルを探したときにPHPが使用するディレクトリのセット(含まれるなど)です。この関数を使用して、ファイルがディレクトリのディレクトリに存在するかどうかを手動で確認するパスを取得できます。
$includePath = get_include_path();
echo $includePath;
その返品値は通常、複数のパスで構成される文字列であり、パスはオペレーティングシステム関連のパスセパレーター(たとえば、コロン」:「Unix/LinuxとSemicolonの下」、「Windowsの下」)によって接続されます。
is_readable()は、ファイルが存在し、読み取り可能な権限を持つかどうかを判断するために使用されます。ブール値を返し、 trueはファイルが存在し、読みやすいことを意味し、 falseはファイルがアクセスできないか、存在しないことを意味します。
if (is_readable('/path/to/file.php')) {
echo "読み取り可能なファイル";
} else {
echo "ファイルは読み取りできません";
}
ファイルの正確な場所がわからない場合がありますが、 Include_Pathが指定したディレクトリに存在する可能性があることのみがわかります。この時点で、 get_include_path()およびis_readable()を使用して、ファイルが存在し、これらのディレクトリで読み取られているかどうかを判断できます。
ファイル名が現在のcurriphpathで読み取られているかどうかを確認するための例の機能を次に示します。
function isFileReadableInIncludePath($filename) {
$paths = explode(PATH_SEPARATOR, get_include_path());
foreach ($paths as $path) {
$fullPath = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $filename;
if (is_readable($fullPath)) {
return $fullPath; // 読み取り可能なファイルへのフルパスを返します
}
}
return false; // すべてのパスに読み取り可能なファイルは見つかりません
}
使用例:
$file = 'config.php';
$result = isFileReadableInIncludePath($file);
if ($result !== false) {
echo "読み取り可能なファイル,パスはです:$result";
include $result;
} else {
echo "ファイルはにあります include_path 読めないか、存在しません";
}
大規模なアプリケーションを開発しており、構成ファイルが複数のパスのいずれかに配置されている可能性があるとします。たとえば、:
/usr/local/lib/myapp/
/home/user/myapp/include/
現在の作業ディレクトリ
これらのパスをphpのinclude_pathに追加できます。
set_include_path(
get_include_path() . PATH_SEPARATOR .
'/usr/local/lib/myapp/' . PATH_SEPARATOR .
'/home/user/myapp/includes/'
);
次に、上記の機能を使用して、ファイルが存在しないか、権限がないことを心配することなく、構成ファイルを安全に含める:
$configFile = isFileReadableInIncludePath('config.php');
if ($configFile) {
include $configFile;
} else {
die('構成ファイルにアクセスできない');
}
is_readable()は、PHPのopen_basedir制限に関連するオペレーティングシステムレベルで読みやすさをチェックします。構成によって、PHPが関連するディレクトリにアクセスできないことを確認してください。
ユーザーが入力したファイル名を使用する場合、ディレクトリトラバーサルなどのセキュリティの脆弱性を防ぐために、常に確認を実行する必要があります。
プロジェクトで自動荷重メカニズム(作曲家など)を使用する場合、この方法はもはや必要なく、プロジェクトの実際のニーズに応じて使用する必要があります。
get_include_path()とis_readable()の組み合わせを使用することにより、ファイルが含まれているパスに存在し、ファイルの完全なパスを明確にすることなく読み取るかどうかを判断することができます。これは、モジュラー設計またはマルチパス展開シナリオで特に実用的です。これらの機能を合理的に使用すると、コードの堅牢性と保守性を向上させることができます。