libraryパスを取得するメソッドの作成

PHP Evo / aglib hacks

libraryパスの取得

ProEvo > PHP Evo > aglib hacks > libraryパスの取得

libraryファイルの取得用に指定したパスを実際に読み込むパスに変換するメソッドを作成する。


1. 読み込みディレクトリとは

1.1 aglibでのディレクトリ指定

PHPではrequire文やinclude文で外部のファイルを読み込むことができます。
aglibでは通常の絶対パス指定や実行上のディレクトリからの相対パス指定のほかに、基準ディレクトリからの相対パスの指定を可能にしました。

1.2 ディレクトリの指定方法

aglibでは、以下のようにディレクトリを指定します。
  1. '/'ではじまる 例: '/usr/local/lib/php'
    絶対パス
  2. '.'ではじまる 例: '../lib/PEAR'
    相対パス
  3. 'aglib'などの通常のディレクトリ指定 例: 'aglib/agAuth'
    基準ディレクトリからの相対パス
また、上記のパス種別を定数として設定します。
// パス種別
/** @const int パス種別:基準ディレクトリ相対 */
define('AG_PATH_NORMAL', 1);
/** @const int パス種別:相対ディレクトリ */
define('AG_PATH_RELATIVE', 2);
/** @const int パス種別:絶対ディレクトリ */
define('AG_PATH_ABSOLUTE', 3);

2. コードの作成

2.1 パス種別の取得

1.2の設定に従い、パスの種別を取得する関数を設定します。
実際のコードは以下のようになります。
	/**
	* パス種別を取得する
	* @param string パス
	* @return int パス種別 AG_PATH_NORMAL:基準ディレクトリ相対/AG_PATH_RELATIVE: 相対ディレクトリ/AG_PATH_ABSOLUTE; 絶対ディレクトリ
	*/
	function pathType($path)
	{
		$s = DIRECTORY_SEPARATOR;
		if ($path=='')                  return AG_PATH_NORMAL;
		$patt = "/^\\.+$/";
		$er = preg_match($patt, $path);
		if ($er > 0)                    return AG_PATH_RELATIVE;
		$patt = "/^\\.+\\" . $s . "/";
		$er = preg_match($patt, $path);
		if ($er > 0)                    return AG_PATH_RELATIVE;
		if (substr($path, 0, 1) == $s)  return AG_PATH_ABSOLUTE;
		$patt = "/[A-Za-z]:\\" . $s . "/";
		$er = preg_match($patt, $path);
		if ($er > 0)                    return AG_PATH_ABSOLUTE;
		return AG_PATH_NORMAL;
	}
このメソッドはaglibのstaticメソッドです。
そのため、
$type = aglib::pathType("aglib")
のように使います

2.2 libraryパスの取得

2,1でパス種別を取得できます。 それを利用してパスを実際に読み込むパスに展開します。
コードは以下のようになります。
	/**
	* ライブラリ用に実際のパスを取得する
	* @param string 元のパス名
	* @return string 実際のパス
	*/
	function getLibPath($path)
	{
		$basedir = aglib::basedir();
		if ($path == '')  return $basedir;
		$type = aglib::pathType($path);
		if ($type == AG_PATH_NORMAL){
			$path = realpath($basedir . "/" . $path);
		}
		return $path;
このメソッドはaglibのstaticメソッドです。
そのため、
$fullpath = aglib::getLibPath("aglib")
のように使います。

(webmaster@aglabo.com)

$Revision: 2 $
Last update: $Date: 2007-02-28 23:35:40 +0900 (豌エ, 28 2譛 2007) $