Intereting Posts
Mongo-PHP – Исключение MongoCursor с MongoDB PHP Driver v1.6 Propel ORM – Соединение несвязанных таблиц Почему мои параметры не отображаются в URL-адресе? Создание запроса SOAP PHP с сертификатом Сочетание двух разных фильтров в одном Query – Elastica ajax dropdown (страна, штат, город) PHP. Как запретить пользователю входить в систему с нескольких компьютеров одновременно? Php-страница с html-формой внутри выполнения php-кода до завершения формы кросс-скомпилированный сервер THTTPD с PHP работает отлично, но нет PHP Удаление фреймов и загрузка содержимого в div PHP 5.4 после установки: preg_match (): Ошибка компиляции: неизвестный бит (ы) опций, установленный со смещением 0 Вложения пользователя PHPMailer Сортировка запросов MySQL с номерами Ошибка PHP при использовании простого сценария загрузки файлов: не удалось открыть поток: нет такого файла или каталога CodeIgniter: удаление 'index.php' из URL-адреса

Как получить корневой URL-адрес сайта?

Может быть, тривиальный вопрос, но я ищу способ сказать, получить корень URL-адреса сайта, например: http://localhost/some/folder/containing/something/here/or/there должен вернуть http://localhost/

Я знаю, что есть $_SERVER['DOCUMENT_ROOT'] но это не то, что я хочу.

Я уверен, что это легко, но я читал: Это сообщение пытается выяснить, что я должен использовать или позвонить.

Идеи?

Другой вопрос, который у меня есть, который http://subsite.localhost/some/folder/containing/something/here/or/there с этим, будет – будет ли когда-либо ответ, работать на таких сайтах, как http://subsite.localhost/some/folder/containing/something/here/or/there поэтому мой конец результатом является http://subsite.localhost/

 $root = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/'; 

Если вас интересует схема и хост текущего сценария.

В противном случае parse_url (), как уже было предложено. например

 $parsedUrl = parse_url('http://localhost/some/folder/containing/something/here/or/there'); $root = $parsedUrl['scheme'] . '://' . $parsedUrl['host'] . '/'; 

Если вас интересуют другие компоненты URL до пути (например, учетные данные), вы также можете использовать strstr () по полному URL-адресу, а «путь» – как игла, например

 $url = 'http://user:pass@localhost:80/some/folder/containing/something/here/or/there'; $parsedUrl = parse_url($url); $root = strstr($url, $parsedUrl['path'], true) . '/';//gives 'http://user:pass@localhost:80/' 

Еще один простой способ:

 <?php $hostname = getenv('HTTP_HOST'); echo $hostname; 

GETENV

(PHP 4, PHP 5)

getenv – Возвращает значение переменной среды

Эта функция PHP возвращает реальный URL-адрес полного пути.

 function pathUrl($dir = __DIR__){ $root = ""; $dir = str_replace('\\', '/', realpath($dir)); //HTTPS or HTTP $root .= !empty($_SERVER['HTTPS']) ? 'https' : 'http'; //HOST $root .= '://' . $_SERVER['HTTP_HOST']; //ALIAS if(!empty($_SERVER['CONTEXT_PREFIX'])) { $root .= $_SERVER['CONTEXT_PREFIX']; $root .= substr($dir, strlen($_SERVER[ 'CONTEXT_DOCUMENT_ROOT' ])); } else { $root .= substr($dir, strlen($_SERVER[ 'DOCUMENT_ROOT' ])); } $root .= '/'; return $root; } 

Вызов pathUrl в этом файле: http://example.com/shop/index.php

 #index.php echo pathUrl(); //http://example.com/shop/ 

Работа с псевдонимами: http://example.com/alias-name/shop/index.php

 #index.php echo pathUrl(); //http://example.com/alias-name/shop/ 

Для подкаталога: http://example.com/alias-name/shop/inc/config.php

 #config.php echo pathUrl(__DIR__ . '/../'); //http://example.com/alias-name/shop/ 

Вы можете использовать Define save на define.php для последующего использования в другом проекте. Это SITE_ROOT DOMAIN PORT SITE_ROOT И SITE PATH

 ** * domain * ex: localhost, maskphp.com, demo.maskphp.com,... */ define('DOMAIN', isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']); /** * protocol * ex: http, https,... */ define('PROTOCOL', isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ? 'https' : 'http'); /** * port * ex: 80, 8080,... */ define('PORT', $_SERVER['SERVER_PORT']); /** * site path * ex: http://localhost/maskphp/ -> /maskphp/ */ define('SITE_PATH', preg_replace('/index.php$/i', '', $_SERVER['PHP_SELF'])); /** * site root * ex: http://maskgroup.com, http://localhost/maskphp/,... */ define('SITE_ROOT', PROTOCOL . '://' . DOMAIN . (PORT === '80' ? '' : ':' . PORT) . SITE_PATH); 

Вы можете отлаживать результат

Вы можете preg_split URL-адрес в первом одиночном / -character:

 function rootUrl($url) { $urlParts = preg_split('#(?<!/)/(?!/)#', $url, 2); return $urlParts[0] != '' ? $urlParts[0] . '/' : ''; } // examples: echo rootUrl('http://user@www.example.com/path/to/file?query=string'); // output: http://user@www.example.com/ echo rootUrl('https://www.example.com/'); // output: https://www.example.com/ echo rootUrl('https://www.example.com'); // output: https://www.example.com/ echo rootUrl('example.com/path/to/file'); // output: example.com/ echo rootUrl('/path/to/file'); // output: [empty] echo rootUrl(''); // output: [empty] 

Функция rootUrl($url) возвращает часть заданной строки $url перед первым / -character плюс конечная / если эта первая часть не пуста. Для URL-адресов, начинающихся с / (относительных URL-адресов), возвращается пустая строка.