2009-10-07 4 views
0

Salut les gars, je suis un peu déconcerté ici maintenant. Eh bien, pour commencer, je construit simple CMS en PHP avec un panneau d'administration de la structure du répertoire est comme ceci:Problèmes de chemin relatifs absolus dans le référencement des ressources Web - besoin d'aide - liés au php

root/ 
    ->admin/ 
    ->images/ 

Il a bien fonctionné comme est cependant les exigences du client ont changé et ils voulaient que, au lieu d'avoir à accéder à l'administrateur dossier en tant que dossier dans la racine, il est accessible en tant que sous-domaine Web. donc www.site.com/admin devient admin.site.com

Cependant, cela a terriblement foiré et détruit pratiquement tout le référencement que j'avais fait. Comme je télécharge des images sur le CMS - cependant le téléchargement sur ../images ne fonctionne pas comme sous un sous-domaine et je suis complètement foiré en essayant de référencer les images à partir de là. Je ai essayé de pirater mon fichier de configuration pendant des semaines et ne peut pas arriver à résoudre ce problème :(- aide s'il vous plaît - sur le site est ok, mais ma section admin est tout foiré :(

J'utilise PHP et MySQL

Répondre

3

on dirait que vous avez appris des chemins toxiques relatifs peuvent être

possible solution rapide:.. Qu'advient-il si vous copiez/symlink/alias admin.domain.com/images à pointez sur le même dossier d'images qui se trouve sur votre site frontal? Je pense que les "../"es supplémentaires seront ignorés."

Plus de manière permanente, et en général, n'utilisez pas chemins relatifs. Ils ne vous causeront que de la douleur. Quelques stratégies:

1) Définir une constante que les points au bon endroit pour les images, css, etc:

define('IMG_DIR','/images'); 
define('CSS_DIR','/images'); 
// ... some time later 
echo '<img src="' . IMG_DIR . '/myimage.jpg'"/>'; 

2) Beaucoup mieux: il suffit de maintenir une constante qui vous indique où votre vie d'application .

define('APP_ROOT','/myapp'); //could be chanted to just '/' if it doesn't live in some folder on the server 
// ... later that day ... 
echo '<img src=\"' . APP_ROOT . '/images/myimage.jpg"/>'; 
// ... or maybe you need to link to a logout script? 
echo '<a href="'. APP_ROOT . '/auth/logout.php">Log Out</a>'; 

Il est important de supposer que vous l'application peut-être besoin de fonctionner à partir de la racine («/») ou un répertoire sur le serveur, etc.

va de même pour toutes les opérations du système de fichiers que vous pourriez faire uniquement sur le côté serveur. Utilisez les chemins de système de fichiers absolus. Si votre application principale a un script comme « config/config.php », vous pouvez coller ce en haut:

define('APP_FS_ROOT',realpath(dirname(__FILE__) . '/..')); 
+0

Je vous entends fort et clair copain - les fonctions realpath dirname étaient juste ce dont j'avais besoin pour rendre une solution rapide: D - vous les gars merci beaucoup pour toute l'aide: D – Ali

+0

+1 parce que j'aurais voté votre réponse si je l'avais vu avant de répondre. –

2

Si l'on suppose à la fois le frontend et l'administrateur sont sur le même système de fichiers, vous devez utiliser chemins absolus pour tout dans l'admin. Dans la configuration de l'administrateur, créez une définition qui correspond au dossier de téléchargement/image physique du frontal. Par exemple, depuis la fontend vous pouvez accéder au dossier uploads avec le chemin relatif ./upload mais à partir du site admin.example.com vous devrez utiliser le chemin absolu /user/example.com/upload.

config de la fontend ressemblerait (www.site.com/config.php):

define("UPLOAD_FOLDER", "./uploads"); 
define("WEB_UPLOAD_FOLDER", "/uploads"); 

de configuration de l'administrateur ressemblerait (admin.site.com/config.php):

define("UPLOAD_FOLDER", "/user/site.com/upload"); 
define("WEB_UPLOAD_FOLDER", "http://www.site.com/uploads"); 

Ensuite, à la fois le frontend et admin renverrait le dossier physique avec:

$filename = UPLOAD_FOLDER . "/myupload.mp3"; 

Et pour créer des liens hypertexte vers le téléchargement que vous utilisez:

<a href="<?php echo WEB_UPLOAD_FOLDER . "/myupload.mp3" ?>">My Upload</a> 
+0

+1 pour ce qui pourrait être une meilleure approche de la question du PO, même si nous disons la même chose. (Et parce que nous avons besoin de rester ensemble :-)) – timdev

1

Une autre solution possible serait de définir un alias de répertoire dans apache pour les répertoires que vous avez déplacés.

Disons que votre sous racine de domaine est /images/sous-domaines

<VirtualHost> 
... 
Alias /images "/subdomains/images" 
... 
</VirtualHost> 

Les deux www.yourDomain.com/images et images.yourDomain.com chargerait les mêmes fichiers. Ou, si vous utilisez Linux, un lien symbolique pourrait accomplir la même chose.

Questions connexes