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

Статус
В этой теме нельзя размещать новые ответы.

Zahar

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

Нужно определьть корень сайта, т.е. не домена а сайта который может располагаться и в папочке домена и работать с поддержкой мод реврайт.
Чуть кода приведу...
Есть скрипт скажем на сайте 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, в общем куда пойдешь по сайту то и возвратит....
}
?>


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

?
 
PHP:
$path = dirname(__FILE__);
При таком использовании будет возвращено имя файла который инклудиться, а не того который подгружает... я так понял что решения задачи пока нет....
А не судьба писать в каждом файле эту строчку? Обязательно инклуд? Где логика господа программисты? =\

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

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

потом тебе нужен я так понял не url сайта
 
если инклудить файл, то так не делают

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

Видимо я сам своих потребностей не понимаю... на счет рук... тоже припускаю... но так как тут кроме предложений по теме еще и демагогия то видимо проблема есть!
Все это нужно для написания системы по типу мини-сапы и мне именно нужен правильный урл сайта, его главной страницы, предложения по поводу прописывать как опциональная настройка не катят, все должно быть на автомате, т.е. залил файл библиотеку подключил инклудом в то место главной страницы где должны будуть показываться ссылки и забыл!
 
И так я нашол решение, правда на 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_FILE, trim($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(); // :)
?>

Работает только когда пути от кореня сайта (не домена), разные у файлов.

Прошу к каментам и поправить меня, я же только учусь...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху