PHP в деталях



         

Комментарии к статье "" - часть 2


table width="100%" cellpadding="0" cellspacing="0" >23.4.2001 01:24  Kaiser  []

А так не проще?? ;)))

ForceType application/x-httpd-php

и будет без всякого поиска файл исполняемым ;))

By!

1.9.2001 12:52  Leo  []

Как развивается данная проблема?

1.10.2001 17:46  Peter A. Shushpanov  []

А так не логичнее будет?

Options Indexes Includes MultiViews FollowSymLinks

RewriteEngine On

RewriteRule ^([^/]+)/([^/]+)/([^/|.]*) /index.php?cat[1]=&cat[2]=&cat[3]=&%{QUERY_STRING} [S]

RewriteRule ^([^/]+)/([^/|.]*) /index.php?cat[1]=&cat[2]=&%{QUERY_STRING} [L]

2.11.2001 15:20  Анатолий  []

Программирую не так давно, но хочется предложить совой способ разбора и проверки урлов.

Очень хочется знать Ваше мнение по-поводу идеи и реализации, поэтому буду рад пообщаться в аське (45816202) или просто ответь на письма.

1) Как обычно, пишем в

RewriteEngine On

RewriteRule ^/.images(.*) /.images [L] - не хотим обрабатывать этот каталог.

RewriteRule ^(.*) /index.php - ну например, перенаправляем все на index.php

на этом вся работа с конфигами апача заканчивается.

2) создаем файлик типа site_structure.inc

$site_urls = array (

"$net" => array(

"default" => "$code_path/internet.html",

'' => ' ',

'line'=> "$internet_path/line.html",

'hosting' => "$internet_path/hosting.html",

"$reshenie" => array(

"default" => "$code_path/recruiting.html",

"" => " ",

"aboutus" => "$recruiting_path/aboutus.html",

),

);

а проще говоря многомерный массив, причем любой размерности.

Вложенный массив является подурлами для родительского.

3) обрабатываем этот файлик.

$modify_structure = File("$tmp_path/timestamp"); - временный файл с временем создания site_structure.inc

if ($modify_structure[0] != filemtime("$code_path/.etc/site_structure.inc") !$modify_structure) Modify_struct();

include_once "$tmp_path/site_str.tmp";

function Modify_struct(){

global $Site_urls,$code_path,$tmp_path,$net,$reshenie,$internet_path,$recruiting_path,$includes_path,$root_path,$admin_path;

$f= new File("$tmp_path/timestamp","w+",LOCK_EX);

$f->Write(filemtime("$code_path/.etc/site_structure.inc"));

$f->Close();

include_once "$code_path/.etc/site_structure.inc";

Site_structure($site_urls, 0,"");

$tmp = "

foreach($Site_urls as $k => $v) $tmp .= '$Site_urls["'.$k.'"] = "'.$v."";n";

$tmp .= "?>";

$f = new File("$tmp_path/site_str.tmp","w+",LOCK_EX);

$f->Write($tmp);

$f->Close();

}

function Site_structure($site_urls, $level,$this_url){

global $Site_urls;

foreach($site_urls as $k => $v){

if ($level == 0) $this_url = "";

if (is_array($v)){

$this_url .= $k."/";

Site_structure($v,$level+1,$this_url);

}

else{

$k = $this_url.$k;

if ($k !== "$this_url") $k.="/";

$Site_urls[$k] = $v;

}

}

}

4) выводим доступные урлы

if ($Site_urls[$Url]){

$tmp_url = substr($Url,0,strlen($Url)-1);

$tmp_url=explode("/",$tmp_url);

foreach ($tmp_url as $k){

$tmp_url1 .= $k."/";

@include_once $Site_urls[$tmp_url1."default/"];

}

@include_once $Site_urls[$Url];

unset($tmp_url);

}

else include_once "$code_path/404.html";

теперь немного про то, как это все работает.

если файл timestamp не существует или время, которое в нем записано не совпадает с временем создания файла site_structure.inc, запускаем функцию обработки многомерного массива, где ключу соответсвует сам подурл, а значению - файл, который надо подлючить для вывода.

вследствие чего создается еще один файл site_str.tmp с обычным ассоциативным массивом, где в качестве ключей выступают уже полные урлы (так сказать от корня), а в качестве значений файлы, которые надо подключить.

После чего этот файл подключается обычным образом.

Таким образом получается, что функции перестройки урлов запускаются только в том случае, если произошло изменение структуры сайта, а в противном случае ничего не происходит.

При обработке используется урл "от корня" то есть в данном случае переменная $Url содержит значение $HTTP_HOST.$SCRIPT_URL

Используется схема сборки, при которой в подурлах переопределяются значения некоторых переменных из родительских урлов, для этого и нужен default

P.S. Вполне допускаю, а скорее даже не сомневаюсь в том, что данный код не совершенен и может быть доработан профессиональным программистом. Очень хочется знать Ваше мнение по поводу всего этого.

<


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