Как получить базовый URL с PHP?

Я использую XAMPP в Windows Vista. В моем развитии у меня есть http://127.0.0.1/test_website/ .

Как получить http://127.0.0.1/test_website/ с PHP?

Я пробовал что-то подобное, но никто из них не работал.

 echo dirname(__FILE__) or echo basename(__FILE__); etc. 

Solutions Collecting From Web of "Как получить базовый URL с PHP?"

Попробуй это:

 <?php echo "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; ?> 

Подробнее о предопределенной переменной $_SERVER

Если вы планируете использовать https, вы можете использовать это:

 function url(){ return sprintf( "%s://%s%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['SERVER_NAME'], $_SERVER['REQUEST_URI'] ); } echo url(); #=> http://127.0.0.1/foo 

В этом ответе убедитесь, что вы правильно настроили Apache, чтобы вы могли безопасно зависеть от SERVER_NAME .

 <VirtualHost *> ServerName example.com UseCanonicalName on </VirtualHost> 

ПРИМЕЧАНИЕ . Если вы HTTP_HOST ключа HTTP_HOST (который содержит пользовательский ввод), вам все равно придется выполнить некоторую очистку, удалить пробелы, запятые, возврат каретки, что-либо, что не является допустимым символом для домена. Например, проверьте функции php builtin parse_url .

Функция, настроенная для выполнения без предупреждений:

 function url(){ if(isset($_SERVER['HTTPS'])){ $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http"; } else{ $protocol = 'http'; } return $protocol . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } 

Fun 'base_url' фрагмент!

 if (!function_exists('base_url')) { function base_url($atRoot=FALSE, $atCore=FALSE, $parse=FALSE){ if (isset($_SERVER['HTTP_HOST'])) { $http = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http'; $hostname = $_SERVER['HTTP_HOST']; $dir = str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); $core = preg_split('@/@', str_replace($_SERVER['DOCUMENT_ROOT'], '', realpath(dirname(__FILE__))), NULL, PREG_SPLIT_NO_EMPTY); $core = $core[0]; $tmplt = $atRoot ? ($atCore ? "%s://%s/%s/" : "%s://%s/") : ($atCore ? "%s://%s/%s/" : "%s://%s%s"); $end = $atRoot ? ($atCore ? $core : $hostname) : ($atCore ? $core : $dir); $base_url = sprintf( $tmplt, $http, $hostname, $end ); } else $base_url = 'http://localhost/'; if ($parse) { $base_url = parse_url($base_url); if (isset($base_url['path'])) if ($base_url['path'] == '/') $base_url['path'] = ''; } return $base_url; } } 

Используйте так же просто, как:

 // url like: http://stackoverflow.com/questions/2820723/how-to-get-base-url-with-php echo base_url(); // will produce something like: http://stackoverflow.com/questions/2820723/ echo base_url(TRUE); // will produce something like: http://stackoverflow.com/ echo base_url(TRUE, TRUE); || echo base_url(NULL, TRUE); // will produce something like: http://stackoverflow.com/questions/ // and finally echo base_url(NULL, NULL, TRUE); // will produce something like: // array(3) { // ["scheme"]=> // string(4) "http" // ["host"]=> // string(12) "stackoverflow.com" // ["path"]=> // string(35) "/questions/2820723/" // } 

Мой ответ

 $base_url="http://".$_SERVER['SERVER_NAME'].dirname($_SERVER["REQUEST_URI"].'?').'/'; 

Применение:

 print "<script src='{$base_url}js/jquery.min.js'/>"; 

Я думаю, что $_SERVER имеет информацию, которую вы ищете. Это может быть что-то вроде этого:

 echo $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] 

Здесь вы можете увидеть соответствующую документацию PHP.

 $modifyUrl = parse_url($url); print_r($modifyUrl) 

Его простое в использовании
Вывод :

 Array ( [scheme] => http [host] => aaa.bbb.com [path] => / ) 

вы можете это сделать

но извините, мой английский не достаточно хорош,

сначала получите исходный код сайта с помощью этого простого кода.

Я тестировал этот код локальным сервером и публичным, и результат хороший.

 <?php function home_base_url(){ // first get http protocol if http or https $base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']!='off') ? 'https://' : 'http://'; // get default website root directory $tmpURL = dirname(__FILE__); // when use dirname(__FILE__) will return value like this "C:\xampp\htdocs\my_website", //convert value to http url use string replace, // replace any backslashes to slash in this case use chr value "92" $tmpURL = str_replace(chr(92),'/',$tmpURL); // now replace any same string in $tmpURL value to null or '' // and will return value like /localhost/my_website/ or just /my_website/ $tmpURL = str_replace($_SERVER['DOCUMENT_ROOT'],'',$tmpURL); // delete any slash character in first and last of value $tmpURL = ltrim($tmpURL,'/'); $tmpURL = rtrim($tmpURL, '/'); // check again if we find any slash string in value then we can assume its local machine if (strpos($tmpURL,'/')){ // explode that value and take only first value $tmpURL = explode('/',$tmpURL); $tmpURL = $tmpURL[0]; } // now last steps // assign protocol in first value if ($tmpURL !== $_SERVER['HTTP_HOST']) // if protocol its http then like this $base_url .= $_SERVER['HTTP_HOST'].'/'.$tmpURL.'/'; else // else if protocol is https $base_url .= $tmpURL.'/'; // give return value return $base_url; } ?> // and test it echo home_base_url(); 

вывод будет следующим:

 local machine : http://localhost/my_website/ or https://myhost/my_website public : http://www.my_website.com/ or https://www.my_website.com/ 

используйте функцию home_base_url на index.php вашего сайта и определите его

и затем вы можете использовать эту функцию для загрузки скрипта, css и контента с помощью URL-адреса, например

 <?php echo '<script type="text/javascript" src="'.home_base_url().'js/script.js"></script>'."\n"; ?> 

создаст такой вывод:

 <script type="text/javascript" src="http://www.my_website.com/js/script.js"></script> 

и если этот скрипт работает нормально,!

Простой и легкий трюк:

 $host = $_SERVER['HTTP_HOST']; $host_upper = strtoupper($host); $path = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $baseurl = "http://" . $host . $path "/"; 

URL-адрес выглядит следующим образом: http://domain.com/folder/

Следующий код уменьшит проблему, чтобы проверить протокол. $ _SERVER ['APP_URL'] отобразит доменное имя с протоколом

$ _SERVER ['APP_URL'] вернет протокол: // domain (например: – http: // localhost )

$ _SERVER ['REQUEST_URI'] для оставшихся частей URL-адреса, например / directory / subdirectory / something / else

  $url = $_SERVER['APP_URL'].$_SERVER['REQUEST_URI']; 

Результат будет таким:

HTTP: // локальный / каталог / подкаталог / чтото / другое

Попробуй это. Меня устраивает.

 /*url.php file*/ trait URL { private $url = ''; private $current_url = ''; public $get = ''; function __construct() { $this->url = $_SERVER['SERVER_NAME']; $this->current_url = $_SERVER['REQUEST_URI']; $clean_server = str_replace('', $this->url, $this->current_url); $clean_server = explode('/', $clean_server); $this->get = array('base_url' => "/".$clean_server[1]); } } 

Используйте следующее:

 <?php /* Test file Tested for links: http://localhost/index.php http://localhost/ http://localhost/index.php/ http://localhost/url/index.php http://localhost/url/index.php/ http://localhost/url/ab http://localhost/url/ab/c */ require_once 'sys/url.php'; class Home { use URL; } $h = new Home(); ?> <a href="<?=$h->get['base_url']?>">Base</a> 

Я нашел это на http://webcheatsheet.com/php/get_current_page_url.php

Добавьте следующий код на страницу:

 <?php function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } ?> 

Теперь вы можете получить текущий URL страницы с помощью строки:

 <?php echo curPageURL(); ?> 

Иногда требуется получить только имя страницы. В следующем примере показано, как это сделать:

 <?php function curPageName() { return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1); } echo "The current page name is ".curPageName(); ?> 

Отредактировано в ответе @ user3832931, чтобы включить порт сервера.

для создания URL-адресов, таких как « https: // localhost: 8000 / folder / »

 $base_url="http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].dirname($_SERVER["REQUEST_URI"].'?').'/'; 
 $http = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'? "https://" : "http://"; $url = $http . $_SERVER["SERVER_NAME"] . $_SERVER['REQUEST_URI']; 

Окончательный ответ:

 $some_variable = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['REQUEST_URI'], "/")+1); 

и вы получаете что-то вроде

 lalala/tralala/something/ 
 function server_url(){ $server =""; if(isset($_SERVER['SERVER_NAME'])){ $server = sprintf("%s://%s%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['SERVER_NAME'], '/'); } else{ $server = sprintf("%s://%s%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['SERVER_ADDR'], '/'); } print $server; } 

Вот один, который я только что собрал, который работает для меня. Он вернет массив с 2 элементами. Первый элемент – это все до? а второй – массив, содержащий все переменные строки запроса в ассоциативном массиве.

 function disectURL() { $arr = array(); $a = explode('?',sprintf( "%s://%s%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['SERVER_NAME'], $_SERVER['REQUEST_URI'] )); $arr['base_url'] = $a[0]; $arr['query_string'] = []; if(sizeof($a) == 2) { $b = explode('&', $a[1]); $qs = array(); foreach ($b as $c) { $d = explode('=', $c); $qs[$d[0]] = $d[1]; } $arr['query_string'] = (count($qs)) ? $qs : ''; } return $arr; } 

Примечание. Это расширение ответа, представленного maček выше. (Кредит, в котором должен быть предоставлен кредит).

Попробуйте использовать: $_SERVER['SERVER_NAME'];

Я использовал его, чтобы повторить базовый url моего сайта, чтобы связать мой css.

 <link href="//<?php echo $_SERVER['SERVER_NAME']; ?>/assets/css/your-stylesheet.css" rel="stylesheet" type="text/css"> 

Надеюсь это поможет!

У меня был тот же вопрос, что и у ОП, но, возможно, другое требование. Я создал эту функцию …

 /** * Get the base URL of the current page. For example, if the current page URL is * "https://example.com/dir/example.php?whatever" this function will return * "https://example.com/dir/" . * * @return string The base URL of the current page. */ function get_base_url() { $protocol = filter_input(INPUT_SERVER, 'HTTPS'); if (empty($protocol)) { $protocol = "http"; } $host = filter_input(INPUT_SERVER, 'HTTP_HOST'); $request_uri_full = filter_input(INPUT_SERVER, 'REQUEST_URI'); $last_slash_pos = strrpos($request_uri_full, "/"); if ($last_slash_pos === FALSE) { $request_uri_sub = $request_uri_full; } else { $request_uri_sub = substr($request_uri_full, 0, $last_slash_pos + 1); } return $protocol . "://" . $host . $request_uri_sub; } 

… которые, кстати, я использую, чтобы помочь создать абсолютные URL-адреса, которые должны использоваться для перенаправления.