150 votes

Comment obtenir l'URL de base avec PHP?

J'utilise XAMPP sous Windows Vista. Dans mon développement, je dois http://127.0.0.1/test_website/.

Comment puis-je obtenir de l' http://127.0.0.1/test_website/ avec PHP?

J'ai essayé quelque chose de ce genre, mais aucun d'entre eux travaillaient.

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

272voto

maček Points 25640

Essayez ceci:

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

En savoir plus sur l' $_SERVER Variable Prédéfinie

Si vous prévoyez sur l'utilisation de https, vous pouvez utiliser ceci:

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

Par cette réponse, assurez-vous de configurer votre serveur Apache correctement de sorte que vous pouvez en toute sécurité dépendent SERVER_NAME.

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

REMARQUE: Si vous êtes en fonction sur HTTP_HOST clé (qui contient la saisie de l'utilisateur), vous avez à faire un peu de nettoyage, suppression des espaces, des virgules, retour chariot , ce qui n'est pas un caractère valide pour un domaine. Vérifier php builtin parse_url fonctions par exemple.

30voto

ftrotter Points 1652

La fonction ajustée à exécuter sans avertissements:

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'];
}

22voto

SpYk3HH Points 10533

Fun 'base_url' extrait de!

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;
    }
}

Utilisation aussi simple que:

//  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/"
//      }

7voto

Jeremy DeGroot Points 2569

Je pense que l' $_SERVER superglobale a l'information que vous cherchez. Il pourrait être quelque chose comme ceci:

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

Vous pouvez voir la documentation PHP ici.

6voto

Solutioner Points 577

La maison de l'url

<?php echo $_SERVER['HTTP_HOST'];?>



url courante (comme: /myfodler/monfichier.le php?action=blabla

<?php echo $_SERVER["REQUEST_URI"];?>



SEULS les url de FICHIER (comme: /myfodler/myfile.php)

<?php echo $_SERVER['PHP_SELF']; ?>



dossier de travail en cours de localisation (comme: /dossier/sous-dossier)

<?php echo dirname($_SERVER["REQUEST_URI"]); ?>



dossier de travail en cours (avec ftp un dossier d'ACCUEIL)

<?php echo dirname(__FILE__); ?>



Vous pouvez les mélanger, comme $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']

En savoir plus: http://www.php.net/manual/en/reserved.variables.server.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X