2010-10-06 19 views
0

Je rencontre des problèmes avec les chemins absolus définis en PHP. Je définir leSITE_ROOTetAPP_PATH comme ceci:Problèmes de chemin absolu en PHP sur localhost sous OS X

defined('SITE_ROOT') ? null : 
define('SITE_ROOT', str_replace('//','/',dirname(__FILE__))); 

defined('APP_PATH') ? null : define('APP_PATH', SITE_ROOT.DS.'application'); 

Lorsque vous utilisez leAPP_PATH dans une application comme ceci:

echo APP_PATH; 

... c'est ce que je reçois:

/Users/user/Sites/MyWebsite/application 

Ce que je veux est pour que la sortie soit:

localhost/application 

est-il un moyen non-kludgy de le faire?

Mon cas d'utilisation est d'utiliser le APP_PATH (déjà utilisé pour faire toutes mes require() « s) fait écho avec HTML pour éviter les problèmes de Pathing relatifs dans les URL pour href » s.

Répondre

1

La constante __FILE__ contient le chemin du fichier, rien d'autre. Regardez $_SERVER['REQUEST_URI'] and $_SERVER['HTTP_HOST'] pour savoir quelle URL a été utilisée pour invoquer le script. C'est l'information d'environnement qui doit être fournie par le serveur Web qui a initié le script PHP (par exemple Apache), ce n'est pas quelque chose que PHP connaît intrinsèquement.

+0

Super, merci! Puisque mon plan est d'avoir ce code facilement portable de mon env dev local à mon env env, recommanderiez-vous d'établir deux chemins séparés? On utiliserait '$ _SERVER ['HTTP_HOST']' et l'autre mentionné ci-dessus. Ou y a-t-il des problèmes avec cette approche? Et y a-t-il des pièges potentiels si vous êtes déployé sur plusieurs serveurs? –

+0

@Josh Tout d'abord, vous ne devez pas inclure l'hôte dans vos liens, mais utiliser des chemins absolus sans hôte (c'est-à-dire '/ application/page/foo'). Cela résout les problèmes d'URL relatifs sans trop compliquer les choses. Deuxièmement, cela dépend vraiment de votre application comment le faire avec élégance. Si vous utilisez un modèle Dispatcher (un fichier .php spécifique est toujours invoqué, qui distribue la requête à d'autres fichiers), il est relativement simple de déterminer "où vous êtes", vous n'avez donc pas besoin de faire de configuration spécifique au système. . Jetez un oeil à l'un des cadres PHP populaires pour des exemples. – deceze

+0

J'ai un fichier initialize.php qui fait ce que je pense que vous dites. Je suis à peu près sûr que '$ _SERVER ['HTTP_HOST']' fait simplement ce que je devrais taper manuellement dans le fichier d'initialisation. Ensuite, je peux utiliser, par exemple, un chemin 'VIEW_URL' pour accéder aux vues. Essayer maintenant de voir. –

0

Ai-je tort de penser que vous pouvez utiliser:

$path = str_replace("/Users/user/Sites/MyWebsite", "localhost",$appPath); 
echo($path); 
//returns: localhost/application 

accueil critique.