Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 19:56   #1
S-HaCK XORitY
Пользователь
 
Аватар для S-HaCK XORitY
 
Регистрация: 19.07.2011
Сообщений: 70
Вопрос PHP Forward (передача управления)

Доброго времени суток!

Нужно создать маршрутизатор, который должен быть конфигурируемый из CMS. Нужно это для того, чтобы пользователь сам мог определить правило для ЧПУ.

Вот основная часть HTACCESS:

Код:
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !rewrite.php$
  RewriteRule ^(.*)$ rewrite.php [L]
</IfModule>
Здесь передача управления на rewrite.php происходит если url не является файлом, симв. ссылкой и директорией.

Допустим url: http://domain.ru/aa/ - физической директории на самом деле не существует, поэтому форвардим на rewrite.php

теперь сам rewrite.php:

PHP код:
<?php
$urlsRewrite 
= array(
    array(
        
"cond" => "#^/aa/$#",
        
"path" => "/a/sss.php",
    ),
);

$req $_SERVER['REQUEST_URI'];

foreach(
$urlsRewrite as $key => $urlRewrite) {

    if(
preg_match($urlRewrite['cond'], $req))
    {
           
$ch curl_init();

            
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
            
curl_setopt($chCURLOPT_TIMEOUT30);

            
curl_setopt($chCURLOPT_URL'http://domain.ru' $urlRewrite['path']);
            
curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
curl_setopt($chCURLOPT_POST1);
            
curl_setopt($chCURLOPT_POSTFIELDSfalse);
            
$output curl_exec($ch);
            
curl_close($ch);

            print 
$output;
    }

}

?>
Маршрутизатор проверят есть какое нибудь правило для адреса #^/aa/$# (cond) и если оно есть, то посылает cURL запрос по адресу из правила (path), таким образом мы сохраняем URL, в тоже время передавая управление другому скрипту.

Вопрос значит вот в чем: правильно ли использовать CURL для этого, а если нет, то какую альтернативу выбрать, если при помощи header('Location: URL', true, 301); то прошу не полениться и описать каким образом можно реализовать это, потому что я уже очень много методов перепробовал с header, даже менял коды HTTP статусов и ничего путного из этого не вышло. А если я на верном пути и CURL, действительно подходит (я имею введу не работоспособность маршрутизатора, потому что он сейчас в таком виде работает, а производительность и более правильный вариант), то на что следует обратить внимание и можно ли curl (в данном случае) заменить fsockopen'ом?

Всем заранее спасибо!
Made All in China - MAC OS...
S-HaCK XORitY вне форума Ответить с цитированием
Старый 08.02.2012, 21:44   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Вообще не понятно зачем тут curl .... include не подходит? Или у вас там чужие домены?
Cronos20 вне форума Ответить с цитированием
Старый 08.02.2012, 22:03   #3
S-HaCK XORitY
Пользователь
 
Аватар для S-HaCK XORitY
 
Регистрация: 19.07.2011
Сообщений: 70
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
Вообще не понятно зачем тут curl .... include не подходит? Или у вас там чужие домены?
include не подходит, потому что ничего подключать не нужно, нужно переадресовывать, а cURL, нужен для того чтобы маршрутизатор работал не как header('location: ...'), а как Forwarded request, т.е. внутренний редирект. но по поводу cURL, сам не уверен, склоняюсь так же к file_get_contents.
Made All in China - MAC OS...
S-HaCK XORitY вне форума Ответить с цитированием
Старый 08.02.2012, 22:11   #4
S-HaCK XORitY
Пользователь
 
Аватар для S-HaCK XORitY
 
Регистрация: 19.07.2011
Сообщений: 70
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
Или у вас там чужие домены?
Забыл добавить, что могут быть и чужие домены и свои, что угодно, технология должна быть универсальна, т.к. это конфигурируемый маршрутизатор, пользователь может вообще его переадресовывать на другой протокол, например ftp, а там еще и авторизация нужна, но не об этом, это крайне редкий случай и для этого будут другие средства, просто я это к тому что, не include/include_once не require/require_once не подойдут.
Made All in China - MAC OS...
S-HaCK XORitY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача управления между компонентами DeKot Общие вопросы Delphi 2 06.09.2010 15:38
PHP test.php?a=1&b=1 не работает передача параметров бедный_студент PHP 5 25.08.2010 23:08
Передача управления по SetFocus promer Компоненты Delphi 6 11.03.2010 13:47
Передача переменной в php Ruska882009 PHP 2 23.09.2009 12:57