Определить URL сайта в скрипте

Тема в разделе "PHP", создана пользователем Zahar, 14 мар 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Zahar

    Zahar

    Регистр.:
    21 мар 2007
    Сообщения:
    248
    Симпатии:
    94
    Здрасти всем, помогите если кто знает решение задачи а то долблюсь уже н один день а универсального метода все нет. Опишу задачу в кратце...

    Нужно определьть корень сайта, т.е. не домена а сайта который может располагаться и в папочке домена и работать с поддержкой мод реврайт.
    Чуть кода приведу...
    Есть скрипт скажем на сайте xttp://site.com/blog/index.php c таким содержисим:

    PHP:
    <?php
    require_once(dirname(__FILE__).'/include/inc.php');

    $url 'http://'.$_SERVER['SERVER_NAME'].$path;
    echo 
    $path;
    ?>
    Файл /include/inc.php :

    PHP:
    <?php
    // Исключим запуск этого скрипта непосредственно, возможен только инклуд.
    if (realpath(__FILE__) == realpath($_SERVER['SCRIPT_FILENAME'])) exit('');


    // определяем путь от кореня домена
    if(strcmp($_SERVER['PHP_SELF'], $_SERVER['SCRIPT_NAME']) == 0) {
    // тут все понятно, нет мод реврайта или фаст цги, нет и проблем с определением пути.
    $path dirname($_SERVER['SCRIPT_NAME']);
    } else {
    // а вот если мод реврайт врубан или работает через фаст цги, до конца не понял именно как пхп работает, и начинаються проблемы...
    $path dirname($_SERVER['SCRIPT_NAME']);// возвращает почему то /cgi-...
    $path dirname($_SERVER['PHP_SELF']); // возвращает и так /blog/archive и так /blog/page и так /blog/2008/12, в общем куда пойдешь по сайту то и возвратит....
    }
    ?>

    Ну вот в общем описал проблему, а решение жду в ответах на пост, если кто знает решение буду очень признателен Вам!
    Спасибо!
     
  2. Lonely Wolf

    Lonely Wolf Прохожие

    Что-то не понял, а как тогда надо?
    PHP:
    $path dirname($_SERVER['PHP_SELF']); // возвращает и так /blog/archive и так /blog/page и так /blog/2008/12, в общем куда пойдешь по сайту то и возвратит.... 
    Это разве не то?
    Или тебе надо именно узнать какой файл отрабатывает в данный момент? Тогда тока так:
    PHP:
    $path dirname(__FILE__);
     
  3. Zahar

    Zahar

    Регистр.:
    21 мар 2007
    Сообщения:
    248
    Симпатии:
    94
    PHP:
    $path dirname(__FILE__);
    При таком использовании будет возвращено имя файла который инклудиться, а не того который подгружает... я так понял что решения задачи пока нет....
     
  4. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    312
    PHP:
    $_SERVER["REQUEST_URI"]
    ?
     
  5. Zahar

    Zahar

    Регистр.:
    21 мар 2007
    Сообщения:
    248
    Симпатии:
    94
    равносильно что и при
    PHP:
    $_SERVER['PHP_SELF']
     
  6. Lonely Wolf

    Lonely Wolf Прохожие

    А не судьба писать в каждом файле эту строчку? Обязательно инклуд? Где логика господа программисты? =\

    Покажи мне хоть одну задачу решение которой нет. Очень интересно будет посмотреть на неё. Я пока с таким не сталкивался.
    Либо нехватает мозгов, либо руки не из того место как правило. :)
     
  7. imperec

    imperec Писатель

    Регистр.:
    9 мар 2009
    Сообщения:
    3
    Симпатии:
    0
    файл

    если инклудить файл, то так не делают

    потом тебе нужен я так понял не url сайта
     
  8. Zahar

    Zahar

    Регистр.:
    21 мар 2007
    Сообщения:
    248
    Симпатии:
    94
    Видимо я сам своих потребностей не понимаю... на счет рук... тоже припускаю... но так как тут кроме предложений по теме еще и демагогия то видимо проблема есть!
    Все это нужно для написания системы по типу мини-сапы и мне именно нужен правильный урл сайта, его главной страницы, предложения по поводу прописывать как опциональная настройка не катят, все должно быть на автомате, т.е. залил файл библиотеку подключил инклудом в то место главной страницы где должны будуть показываться ссылки и забыл!
     
  9. Zahar

    Zahar

    Регистр.:
    21 мар 2007
    Сообщения:
    248
    Симпатии:
    94
    И так я нашол решение, правда на 100% утверждать не буду но вроде по последним тестам все работает как часики.

    файл который инклудим ./include/siteurl.php :
    PHP:

    <?php
    /***************************************************************************/
    /****************************  SITE URL  ***********************************/
    /***************************************************************************/
        
    function validate_site_name () {
            
    define('CLM_INC_FILE'str_replace('\\''/'dirname(__FILE__)).'/');
            
    $protocol 'http';
            if (isset(
    $_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') {
                
    $protocol 'https';
                }
            
    $domainname = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME');
            if (
    eregi('www.'$domainname)) $domainname eregi_replace('www.'''$domainname);
            
    $port = ($_SERVER['SERVER_PORT'] != '80') ? ':'.$_SERVER['SERVER_PORT'] : '';
            
            if(
    strcmp($_SERVER['PHP_SELF'], $_SERVER['SCRIPT_NAME']) == 0) {
                
    $path dirname($_SERVER['SCRIPT_NAME']);
            } else {
                
    $path '';
                
    $php_self_explode explode('/'$_SERVER['PHP_SELF']);
                foreach (
    $php_self_explode as $value) {
                    if(
    stripos(CLM_INC_FILEtrim($value))) $path .= '/'.$value;
                    }
            }
            
            
    $site_url $protocol.'://'.$domainname.$port.$path;
            return 
    $site_url;
        }
    /***************************************************************************/
    /***************************************************************************/
    ?>

    основной скрипт, скажем index.php :
    PHP:
    <?php
    require_once('./include/siteurl.php');
    echo 
    validate_site_name(); // :)
    ?>
    Работает только когда пути от кореня сайта (не домена), разные у файлов.

    Прошу к каментам и поправить меня, я же только учусь...
     
  10. pavel012007

    pavel012007

    Регистр.:
    12 мар 2008
    Сообщения:
    210
    Симпатии:
    117
    В том же Денвере
    PHP:
    $_SERVER["SCRIPT_NAME"] === $_SERVER["PHP_SELF"]
    и равно допустим, "/blog/index.php". При этом $_SERVER["REQUEST_URI"] === "/blog/".
     
Статус темы:
Закрыта.