J'utilise XAMPP sur Windows Vista. Dans mon développement, j'ai http://127.0.0.1/test_website/
.
Comment obtenir http://127.0.0.1/test_website/
avec PHP?
J'ai essayé quelque chose comme ça, mais aucun d'entre eux n'a fonctionné.
echo dirname(__FILE__)
or
echo basename(__FILE__);
etc.
Essaye ça:
<?php echo "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; ?>
En savoir plus sur la $_SERVER
Variable prédéfinie
Si vous envisagez d'utiliser 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
Per cette réponse , s’il vous plaît assurez-vous de configurer votre Apache correctement afin que vous puissiez dépendre en toute sécurité de SERVER_NAME
.
<VirtualHost *>
ServerName example.com
UseCanonicalName on
</VirtualHost>
NOTE: Si vous dépendez de la clé HTTP_Host
(qui contient une entrée utilisateur), vous devez encore effectuer un nettoyage, supprimer des espaces, des virgules, des retours à la ligne, tout ce qui n'est pas un caractère valide pour un domaine. Vérifiez php builtin parse_url functions par exemple.
Fonction ajustée pour 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'];
}
Extrait 'base_url' amusant!
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;
}
}
Utilisez 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/"
// }
$modifyUrl = parse_url($url);
print_r($modifyUrl)
C'est juste simple à utiliser
Sortie:
Array
(
[scheme] => http
[Host] => aaa.bbb.com
[path] => /
)
$base_url="http://".$_SERVER['SERVER_NAME'].dirname($_SERVER["REQUEST_URI"].'?').'/';
Usage:
print "<script src='{$base_url}js/jquery.min.js'/>";
Je pense que le $_SERVER
superglobal contient les informations que vous recherchez. Cela pourrait être quelque chose comme ça:
echo $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']
Vous pouvez voir la documentation PHP correspondante ici .
Le code suivant réduira le problème de vérification du protocole. Le $ _SERVER ['APP_URL'] affichera le nom de domaine avec le protocole
$ _SERVER ['APP_URL'] va retourner protocole: // domaine (par exemple: - http: // localhost )
$ _SERVER ['REQUEST_URI'] pour les parties restantes de l'URL telles que / répertoire/sous-répertoire/quelque chose/else
$url = $_SERVER['APP_URL'].$_SERVER['REQUEST_URI'];
La sortie serait comme ça
http: // hôte local/répertoire/sous-répertoire/quelque chose/else
Astuce simple et facile:
$Host = $_SERVER['HTTP_Host'];
$Host_upper = strtoupper($Host);
$path = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$baseurl = "http://" . $Host . $path . "/";
L'URL ressemble à ceci: http://example.com/folder/
J'ai trouvé ceci sur http://webcheatsheet.com/php/get_current_page_url.php
Ajoutez le code suivant à une page:
<?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;
}
?>
Vous pouvez maintenant obtenir l'URL de la page actuelle en utilisant la ligne:
<?php
echo curPageURL();
?>
Parfois, il est nécessaire d’obtenir le nom de la page uniquement. L'exemple suivant montre comment procéder:
<?php
function curPageName() {
return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
}
echo "The current page name is ".curPageName();
?>
tu peux faire comme ça
mais désolé mon anglais n'est pas assez bon,
d'abord obtenir l'URL de base à la maison avec ce code simple ..
j'ai testé ce code par le serveur local et public et le résultat est bon ..
<?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();
la sortie sera comme ceci:
local machine : http://localhost/my_website/ or https://myhost/my_website
public : http://www.my_website.com/ or https://www.my_website.com/
utilisez la fonction home_base_url à index.php de votre site web et définissez-le
et alors vous pouvez utiliser cette fonction pour charger le script, le css et le contenu via une URL comme
<?php
echo '<script type="text/javascript" src="'.home_base_url().'js/script.js"></script>'."\n";
?>
créera une sortie comme ceci:
<script type="text/javascript" src="http://www.my_website.com/js/script.js"></script>
et si ce script fonctionne bien ,!
Essaye ça. Ça marche pour moi.
/*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]);
}
}
Utilisez comme ceci:
<?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>
Essayez le code suivant:
$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://".$_SERVER['HTTP_Host'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
echo $config['base_url'];
Modifié à la réponse de @ user3832931 pour inclure le port du serveur.
former des URL comme ' https: // localhost: 8000/folder/ '
$base_url="http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].dirname($_SERVER["REQUEST_URI"].'?').'/';
Dans mon cas, j'avais besoin d'une URL de base similaire à celle de la variable RewriteBase
contenue dans le fichier .htaccess
.
Malheureusement, il est impossible de récupérer la variable RewriteBase
à partir du fichier .htaccess
avec PHP. Mais il est possible de définir une variable d'environnement dans le fichier .htaccess, puis de récupérer cette variable en PHP. Il suffit de vérifier ces bits de code:
.htaccess
SetEnv BASE_PATH /
index.php
Maintenant, je l'utilise dans la balise de base du modèle (dans la section principale de la page):
<base href="<?php echo ! empty( getenv( 'BASE_PATH' ) ) ? getenv( 'BASE_PATH' ) : '/'; ?>"/>
Donc, si la variable n'était pas vide, nous l'utilisons. Sinon, repliez sur /
comme chemin de base par défaut.
Selon l'environnement, l'URL de base sera toujours correcte. J'utilise /
comme URL de base sur les sites Web locaux et de production. Mais /foldername/
pour l'environnement de transfert.
Ils avaient tous leur propre .htaccess
en premier lieu parce que RewriteBase était différent. Donc, cette solution fonctionne pour moi.
Juste tester et obtenir le résultat.
// output: /myproject/index.php
$currentPath = $_SERVER['PHP_SELF'];
// output: Array ( [dirname] => /myproject [basename] => index.php [extension] => php [filename] => index )
$pathInfo = pathinfo($currentPath);
// output: localhost
$hostName = $_SERVER['HTTP_Host'];
// output: http://
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
// return: http://localhost/myproject/
echo $protocol.$hostName.$pathInfo['dirname']."/";
Essayez d'utiliser: $_SERVER['SERVER_NAME'];
Je l'ai utilisé pour faire écho à l'URL de base de mon site pour lier mes css.
<link href="//<?php echo $_SERVER['SERVER_NAME']; ?>/assets/css/your-stylesheet.css" rel="stylesheet" type="text/css">
J'espère que cela t'aides!
$some_variable = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['REQUEST_URI'], "/")+1);
et vous obtenez quelque chose comme
lalala/tralala/something/
En voici un que je viens de mettre en place et qui fonctionne pour moi. Il retournera un tableau avec 2 éléments. Le premier élément est tout avant le? et le second est un tableau contenant toutes les variables de chaîne de requête d'un tableau associatif.
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;
}
Note: Ceci est un développement de la réponse fournie par maček ci-dessus. (Crédit où le crédit est dû.)
J'avais la même question que le PO, mais peut-être une exigence différente. J'ai créé cette fonction ...
/**
* 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;
}
... que j'utilise d'ailleurs pour créer des URL absolues à utiliser pour la redirection.
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;
}
$http = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'? "https://" : "http://";
$url = $http . $_SERVER["SERVER_NAME"] . $_SERVER['REQUEST_URI'];