2010-06-08 3 views
2

Fondamentalement, je veux que mon script produise son URL absolue, mais je ne veux pas le programmer statiquement dans le script. Par exemple, si mon URL actuelle est http://example.com/script.php, je veux pouvoir la stocker en tant que variable, ou en faire l'écho. à savoir $url = http://example.com/script.php;Utiliser PHP pour récupérer l'URL absolue du script?

Mais si je déplace le script à un serveur/domaine différent, je veux qu'il ajuste automatiquement à celle, à savoir $url = http://example2.com/newscript.php;

Mais je ne sais pas comment s'y prendre pour le faire. Des idées?

Répondre

6
$url = "http://" . $_SERVER['HTTP_HOST'] . '/script.php'; 

S'il y a une possibilité protocole changera aussi bien (à savoir https au lieu de http), utilisez ceci:

$url = ($_SERVER['HTTPS'] ? "https://" : "http://") . $_SERVER['HTTP_HOST'] . '/script.php'; 
3

$_SERVER['HTTP_HOST'] et $_SERVER['SCRIPT_NAME'] contiennent ces informations.

MISE À JOUR: Comme @Col. Shrapnel signale que SCRIPT_NAME renvoie le chemin réel du script par rapport à l'hôte, et non l'URL demandée, qui peut être différente si vous utilisez la réécriture d'URL. En outre, contrairement à REQUEST_URI, il n'inclut pas les variables éventuellement ajoutées.

Notez que SCRIPT_NAME est contenu équivalent à PHP_SELF, la différence est que:

SCRIPT_NAME est défini dans la spécification CGI 1.1 , et est donc une norme. Cependant, tous les serveurs Web ne le mettent effectivement en œuvre, et il n'est donc pas nécessairement portable. PHP_SELF, sur le d'autre part, est implémenté directement par PHP , et tant que vous programmez en PHP, sera toujours présent.

+0

Cette résolu le problème le mieux, surtout à cause de '$ _SERVER [ « SCRIPT_NAME »];' Merci – Rob

+0

@Rob dire adieu à la mod_rewrite et chaîne de requête –

+0

En effet, si vous voulez le garder REQUEST_URI portable plus d'un ami. – Wrikken

0

Essayez d'utiliser

$url = "http://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"; 
1

par pari (:

$ _SERVER [ 'HTTP_HOST'] et $ _SERVER [ "REQUEST_URI"];

cependant, $ _SERVER [ 'HTTP_PORT '] et $ _SERVER [' HTTPS '] pourraient être utilisés dans le cas critique

Cependant, la plupart du temps vous n'avez pas besoin de tout cela, sauf $ _SERVER ["REQUEST_URI"]
car le navigateur connaît déjà le reste: port, hôte et tout.

0

J'ai une bibliothèque qui m'aide à faire cela à travers les serveurs web et est également agnostique à mod_rewrite.

La bibliothèque est appelée Bombay: http://github.com/sandeepshetty/bombay

Pour l'utiliser, vous devez faire ceci:

<?php 

    require '/path/to/bombay.php'; 
    requires ('uri'); 

    echo absolute_uri('script.php'); 

    //prints http://example.com/script.php if hosted on example.com and accessed over http 
    //prints https://example2.com/script.php if hosted on example2.com and accessed over https 

?> 

Vous pouvez également étudier le code, et prendre ce dont vous avez besoin.

Questions connexes