Si comme moi vous développez un site en php pas trop complexe (ou pas, c’est selon) en local et que vous faites régulièrement des mises à jour en ligne, vous avez forcément ce problème (sauf si vous vous débrouillez autrement) : sur votre site en local (http://localhost/dossier/site…) vous spécifiez un chemin absolu dans vos appels de feuilles css, vos javascripts, vos images… ? Un truc semblable à :
<script src="/site/dossier/js/fonctions.js" type="text/javascript"></script>
Ce qui est très contraignant puisqu’il faut changer le chemin sans arrêt (sauf si le chemin sur votre serveur est le même, mais c’est très rare… !) en mettant des / au lieu du chemin absolu d’avant… Bref, une catastrophe si on ne connais pas de méthode pratique pour éviter cette corvée ! Vous pourriez bien faire une simple variable PHP en y mettant le chemin absolu, ce qui réduirait considérablement la tâche, mais j’ai une astuce encore plus commode !
Il suffit de récupérer l’adresse du serveur et de la stocker dans une variable, c’est bête, mais il fallait y penser ! L’astuce est très simple : on définie la variable $server avec l’adresse du serveur, si celle-ci est égale à localhost (cas général) ou mamp (si vous avez changé le nom de votre localhost par exemple) on créer une variable valant le chemin absolu que l’on souhaite afficher en local. Sinon, le chemin absolu sera /, c’est à dire, à la racine, ce qui est généralement le cas des sites publiés online.
Un petit plus consiste à définir en même temps l’adresse des images, en reprenant le chemin du site et en y intégrant tout simplement le chemin où les images sont stockées… !
<?php $server = $_SERVER['HTTP_HOST']; $server = $server[0]; // $server = explode(':',$_SERVER['HTTP_HOST']); // La ligne ci dessus contient un explode pour les utilisateurs de MAMP sous Mac, où l'adresse locale est localhost:8888 par défaut. if ($server == 'localhost' or $srv == 'mamp') { $path = '/site/dossier/'; } else { $path = '/'; } $pathImg = $path.'img/'; ?>
Ce code est tel que je l’utilise. Bien entendu, pour qu’il convienne à votre cas de figure, il vous faudra modifier les chemins et le nom du localhost si il est différent. Ensuite, et c’est là que c’est un peu contraignant par contre, on insère les chemins définis plus haut, mais sans se soucier du chemin ! Voici quelques exemples, respectivement, une feuille de style css, un fichier javascript, une image et un lien.
<link rel="stylesheet" type="text/css" href="<?php echo $path; ?>style.css" media="screen" /> <script src="<?php echo $path; ?>" type="text/javascript"></script> <img src="<?php echo $pathImg; ?>image.jpg" alt="" /> <a title="Ma page" href="<?php echo $path; ?>page.html">Contenu du lien</a>
A vous d’être créatif et malin pour rendre cette fonction encore plus pratique, peut-être en spécifiant une variable pour le css, le javascript etc !



#1
Par diz9 le 9 juillet 2009 à 17:35
Sinon, tu te fais une architecture, dans la configuration, avec des constantes.
define(‘PATH_BASE’,'/site’);
define(‘PATH_SCRIPTS’,PATH_BASE.’/scripts’);
etc…
Ensuite, y a plus qu’à modifier le ‘/site’ initial ;D
#2
Par Flayks le 9 juillet 2009 à 17:38
@diz9 : Aussi, mais j’ai jamais dis que ma petite astuce était la meilleure ^^
De plus ton code ne permet pas d’être tranquille en ayant à modifier le path à chaque modification… !? :p
#3
Par diz9 le 10 juillet 2009 à 16:46
C’est vrai, mais, en général, tu update pas tous les fichiers sur ton site, mais que ceux que t’as modifié.
Or donc, ici, tu touches pas à ce fichier de conf (avec les pass sql, etc…).
#4
Par Jukien le 13 juillet 2009 à 11:11
J’ai une solution encore meilleure à proposer. Du moins, je pense, vu que vous n’avez pas besoin de toucher au code, mais juste à la configuration apache/DNS de votre PC local.
Il suffit en effet de faire pointer http://domain.local sur 127.0.01, puis de configurer Apache pour le faire atterrir directement dans le bon dossier.
Ainsi, dans mon cas :
- http://ilonet.fr pointe sur le serveur.
- http://ilonet.local pointe sur mon serveur de développement.
Les liens de la forme /css/machin.js fonctionnent donc dans tous les cas
Après, pour les projets de plus grande envergure (principalement ceux destinés à être redistribués), passer par des constantes est obligatoire. Mais les deux peuvent être combiné, si c’est bien fait.
#5
Par Flayks le 14 juillet 2009 à 15:31
@Jukien : En effet, il existe tout un tas de méthode, plu simples ou plus complexes, dépendantes des besoins… Mais il faut avouer que toutes sont utiles
#6
Par Sakacoco le 15 juillet 2009 à 19:26
Ou encore sous wordpress:
echo get_template_directory_uri();
Pour avoir l’uri ( faut rajouter un / après ) du template