Как получить базовый URL с помощью PHP? - PullRequest
123 голосов
/ 12 мая 2010

Я использую 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.

Ответы [ 21 ]

234 голосов
/ 12 мая 2010

Попробуйте:

<?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 (который содержит пользовательский ввод), вам все равно придется выполнить некоторую очистку, удалить пробелы, запятые, возврат каретки, все, что не является допустимым символом для домена.Посмотрите встроенные функции php parse_url , например.

26 голосов
/ 24 января 2013

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

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'];
}
19 голосов
/ 19 ноября 2013

Интересный фрагмент 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: /1592384/kak-poluchit-bazovyi-url-s-pomoschy-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/"
//      }
12 голосов
/ 15 июля 2016
$modifyUrl = parse_url($url);
print_r($modifyUrl)

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

Array
(
    [scheme] => http
    [host] => aaa.bbb.com
    [path] => /
)
11 голосов
/ 15 июля 2014
   $base_url="http://".$_SERVER['SERVER_NAME'].dirname($_SERVER["REQUEST_URI"].'?').'/';

Использование:

print "<script src='{$base_url}js/jquery.min.js'/>";
6 голосов
/ 12 мая 2010

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

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

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

3 голосов
/ 13 мая 2016

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

$ _ SERVER ['APP_URL'] вернет протокол: // домен (например: - http://localhost)

$ _ SERVER ['REQUEST_URI'] для оставшихся частей URL, таких как / directory / подкаталог / что-то / else

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

Вывод будет такой

http://localhost/directory/subdirectory/something/else

2 голосов
/ 01 августа 2014

Я нашел это на 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();
?>
2 голосов
/ 31 декабря 2016

Попробуй это. У меня это работает.

/*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>
2 голосов
/ 12 февраля 2014

Вы можете сделать это так, но извините, мой английский недостаточно хорош.

Во-первых, получите домашний базовый URL с помощью этого простого кода.

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

<?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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...