САМОУЧИТЕЛЬ PHP 4



         

Библиотекарь - часть 2


Вот что у нас получится в результате:

Листинг 29.1. Библиотекарь: librarian.phl

<?if(!defined("LIBRARIAN_LOADED")) {

define("LIBRARIAN_LOADED",1);

// Расширение библиотечных файлов по умолчанию

define("LibExt","phl");

// Пути поиска библиотек. Если начинаются с точки, то поиск

// ВСЕГДА ведется относительно текущего каталога, даже если его

// сменят, в противном случае при следующем вызова Uses() будет

// выполнен перевод пути в абсолютный.

$INC=array(".","./lib");

// Функция преобразует указанный относительный путь в абсолютный.

// Если путь уже является абсолютным (т. е. отсчитывается от корневого

// каталога системы), то с ним ничего не происходит, в противном случае

// используется имя текущего каталога (или заданного в $cur) с

// необходимыми преобразованиями. Существование файла с полученным полным

// именем не проверяется. Функция лишена некоторых недостатков

// встроенной в PHP realpath() и имеет по сравнению с ней несколько

// большие возможности, работая, правда, чуть медленнее.

function GetAbsPath($name,$cur="") { return abs_path($name,$cur); }

function abs_path($name,$cur="")

{  // Преобразуем обратные слэши в прямые

   $name=strtr(trim($name),"\\","/");

   // Сначала разбиваем путь по знакам "/"

   $Parts=explode("/",$name);

   $Path=($cur===""?getcwd():$cur); // начальный каталог поиска

   foreach($Parts as $i=>$s) if($s!=".") {     

     // Признак корневого каталога?

     if(!$i && (strlen($s)>1&&$s[1]==":"||$s=="")) $Path=$s;

     // Ссылка на родительский каталог?

     elseif($s=="..") {

       // Если это уже корневой каталог, то куда спускаться?..

       if(strlen($Path)>1 && $Path[1]==":") continue;

       // Иначе используем dirname()

       $p=dirname($Path);

       if($p=="/"||$p=="\\"||$p==".") $Path=""; else $Path=$p;




Содержание  Назад  Вперед