Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ная переменная окружения), которая, как мы 
знаем, в Windows-версии PHP содержит не то значение, которое мы ожидаем. 
r И еще нам хочется, чтобы на момент загрузки модуля текущий каталог сменялся 
на тот, в котором расположен файл модуля. Таким образом, стартовая часть биб- 
лиотеки всегда сможет определить, где она находится, — например, при помощи 
вызова getcwd(). 
Вот что у нас получится в результате: 
Листинг 29.1. Библиотекарь: librarian.phl 
$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; 
} 
// Иначе просто имя очередного каталога 
elseif($s!=="") $Path.="/$s"; 
} 
return ($Path!==""?$Path:"/"); 
} 
// Преобразует URL в абсолютный файловый путь. 
// Т. е. если адрес начинается со слэша, то результат рассматривается 
// по отношению к каталогу DOCUMENT_ROOT, а если нет — то относительно 
// dirname($SCRIPT_NAME). Конечно, функция не безупречна (например, она 
// не умеет обрабатывать URL, заданные Alias-директивами Apache, но в 
// большинстве случаев это и не нужно. 

Глава 29. Модульность программы. Написание "библиотекаря" 
401 
function Url2Path($name) 
{ $curUrl=dirname($GLOBALS["SCRIPT_NAME"]); 
$url=abs_path(trim($name),$curUrl); 
return getenv("DOCUMENT_ROOT").$url; 
} 
// Превращает все пути в списке $INC в абсолютные, однако делает это 
// не каждый раз, а только если массив изменился с момента последнего 
// вызова. 
function AbsolutizeINC() 
{ global $INC; 
static $PrevINC=""; // значение $INC при предыдущем входе 
// Сначала проверяем — изменился ли $INC. Если да, то преобразуем 
// все пути в массиве в относительные, иначе ничего не делаем. 
// Нам это нужно только из соображений повышения производительности 
// функции. 
if($PrevINC!==$INC) { 
// Мы не можем использовать foreach, т. к. нам надо 
// модифицировать массив 
for($i=0; $i
		
 
<<-[Весь Текст]
Страница: из 287
 <<-