Obtenir l'URL de la racine d'un site web PHP
Je suis actuellement en train de travailler sur un projet PHP et je suis à la recherche d'un moyen pour obtenir l'URL de la racine du site, j'ai un fichier de configuration à la racine donc je pense que pour l'aide que figure le "URL de base." Je suis à la recherche d'un moyen de le faire de manière dynamique afin que je puisse localiser l'URL de la racine du site, c'est à dire http://domain.com/my_app/
. Je fais de mon mieux pour éviter d'utiliser des chemins relatifs et j'utilise PHP pour générer les Url pour ce que je suis en utilisant. Par exemple, j'utilise PHP pour générer le code CSS et le code CSS lien vers les images donc je voudrais obtenir une URL absolue dans ici, au lieu d'un chemin d'accès relatif.
my_app/
admin/
resources/
css/
admin-css.php
imgs/
login.png
resources/
css/
css.php
imgs/
my-image.png
shared-image.png
config.php
Dans mon resources/css/css.php
fichier, je cherche à obtenir la "URL de base", donc je peux générer une URL absolue à la imgs
dossier comme http://domain.com/resources/imgs/my-image.png
mais actuellement je suis http://domain.com/resources/css/imgs/my-image.png
depuis le définit en dessous de chercher à obtenir le répertoire des chargés de fichier PHP, pas inclus. Je voudrais aussi partager des images entre les dossiers (c'est à dire accéder à la shared-image.png
fichier à partir de la admin
dossier) afin d'obtenir l'URL de base, l'idéal serait de générer des liens. La raison pour laquelle je l'en évitant les chemins relatifs est parce que j'ai une fonction qui crée une URL, createURL()
, afin que je puisse obtenir tous les Url de travail sans avoir à coder quoi que ce soit.
<?php
DEFINE('HTTP_TYPE', $_SERVER['HTTP_X_FORWARDED_PROTO']);
DEFINE('HTTP_ROOT', $_SERVER['HTTP_HOST']);
DEFINE('HTTP_FOLDER', dirname($_SERVER['PHP_SELF']) . '/');
DEFINE('BASE_URL', HTTP_TYPE . "://" . HTTP_ROOT . HTTP_FOLDER);
function createURL($pathFromRoot)
{
return BASE_URL . $pathFromRoot;
}
Tous ces définit sont situés dans mon fichier de configuration, donc je pense que la meilleure façon de le faire est d'entrer l'URL du fichier de configuration (http://domain.com/my_app/config.php
) et de la bande de la "config.php." Gardez à l'esprit, le site web pourrait être organisé plus profondément dans une structure de dossier http://domain.com/my_app/another/folder/config.php
ou pas de sous-dossiers http://domain.com/config.php
.
Est-ce possible, si oui, comment peut-il être fait? Ou est-il une autre approche que je devrais suivre?
HTTP_X_FORWARDED_PROTO
n'est installé que si le client a envoyé le X-Forwarded-Proto
en-tête, ce qui n'est pas toujours le cas.)Pas clair, vous êtes en
resources/css
et espérer obtenir my_app/
ou vous êtes dans mon application, y compris un fichier dans resources/css
et obtenir ce?Tu ne peux pas analyser la partie de l'URL que vous voulez? Vous prenez votre BASE_URL et seulement split, où il est le problème?
côté client, l'URL @lampwins je suis dans le
resources/css
répertoire et que vous souhaitez obtenir my_app/
, j'ai édité ma question. @MichaelVilleneuve le truc c'est que je ne savent pas forcément ce qui serait faux, je n'ai pas coder en dur rienVous ne savez pas ce n'est pas bon, mais savez-vous quelle partie est la bonne? Si oui, j'ai reçu votre réponse
OriginalL'auteur allejo | 2013-11-01
Vous devez vous connecter pour publier un commentaire.
Après avoir fait un
var_dump
de$_SERVER
et déconner, j'ai trouvé que je pouvais générer l'URL de base avec cette solution, au cas où quelqu'un tombe sur cette question. Je suis sûr qu'il ya d'autres façons, mais c'est ce qui a fonctionné pour moi.OriginalL'auteur allejo
J'ai juste besoin de la même chose, j'ai combiné les réponses de ici et ici pour créer cette solution qui peut être facilement converti à plusieurs constantes et/ou une fonction.
J'utilise un point d'entrée unique pour mon application web (index.php) et ont ma config dans un sous-dossier.
Vous pouvez soit enlever les dossiers connus comme indiqué dans le commentaire de la ligne de code ou de l'exécuter à partir du dossier principal. Comme exemple de votre structure peut être soit/ou d':
$urlDir = str_replace($docRoot, '', $dirRoot);
ou
$urlDir = str_replace('/include', '/',str_replace($docRoot, '', $dirRoot));
Ensemble Du Code:
En fonction des configurations de serveur: La sortie peut ne pas contenir une barre oblique /si l'on voulait ensuite, utilisez soit:
$urlDir = str_replace('/include', '/',str_replace($docRoot, '/', $dirRoot));
$urlDir = str_replace($docRoot, '/', $dirRoot);
BTW, la fonction semble inutile comme par exemple:
OriginalL'auteur CrandellWS