Comment puis-je configurer un absolu chemin include en PHP?
En HTML, je peux trouver un fichier à partir de la du serveur web dossier racine en commençant par le chemin avec des "/". Comme:
/images/some_image.jpg
Je peux mettre ce chemin d'accès dans n'importe quel fichier dans un sous répertoire, et il sera fait à l'image de droite.
Avec PHP, j'ai essayé quelque chose de similaire:
include("/includes/header.php");
...mais qui ne fonctionne pas.
Je pense que c' cette page est de dire que je peux include_path
une fois, et après cela, il sera supposé. Mais je ne suis pas tout à fait obtenir la syntaxe. Les deux exemples de commencer par une période, et il dit:
À l'aide d'un . dans l'include path permet par rapport comprend que cela signifie que le répertoire courant.
Par rapport comprend sont exactement ce que je ne pas souhaitez.
Comment puis-je m'assurer que tous mes comprend point à la root/includes
dossier? (Bonus: et si je veux mettre ce dossier à l'extérieur de l'annuaire public?)
Clarification
Mes fichiers de développement sont actuellement desservies par XAMPP/Apache. Cela affecte le chemin absolu? (Je ne suis pas encore sûr de ce que le serveur de production sera.)
Mise à jour
Je ne sais pas ce que mon problème était ici. Le include_path
chose que j'ai référencé ci-dessus est exactement ce que je cherchais, et que la syntaxe n'est pas vraiment à confusion. Je l'ai essayé et il fonctionne très bien.
Une chose qui se produit pour moi, c'est que certaines personnes ont pensé que "//chemin" est un "chemin absolu" parce qu'ils ont assumé le système d'exploitation Linux. Ce serveur est Windows, de sorte qu'un chemin d'accès absolu devrait commencer par le nom du lecteur.
De toute façon, le problème est résolu! 🙂
- Veuillez expliquer en quoi "...mais qui ne fonctionne pas" signifie.
- Je commence à penser que je ne sais pas ce que tu veux dire par le chemin d'accès absolu.
- Jacco - ce que je veux dire par le chemin absolu est "un chemin partant de la racine du serveur web, au lieu de partir de l'endroit où le code est utilisé." Aussi PAS de "démarrage à partir du disque dur." Je veux être en mesure de déplacer le code à un autre serveur sans aucune modification.
- La plupart des gens appellent que le "document root". Gardez à l'esprit que $_SERVER['DOCUMENT_ROOT'] n'est pas toujours disponible.
- quand la variable $_SERVER['DOCUMENT_ROOT'] ne pas être disponibles?
- Un exemple serait d'appeler le fichier php en ligne de commande, dans ce cas, la
$_SERVER
tableau serait vide
Vous devez vous connecter pour publier un commentaire.
Ce que je fais, c'est mettre un config.php fichier dans mon répertoire racine. Ce fichier est inclus par tous les fichiers PHP dans mon projet. Dans ce config.php fichier, je puis effectuez les opérations suivantes;
Puis dans tous les fichiers, je sais ce que la racine de mon projet et peut faire des trucs comme ça
Désolé, pas de points bonus pour obtenir à l'extérieur de l'annuaire public 😉 Cela a aussi le malheureux effet secondaire que vous avez encore besoin d'un chemin relatif pour trouver config.php mais il fait le reste de votre comprend beaucoup plus facile.
dirname(__FILE__)
est__DIR__
Une stratégie
Je ne sais pas si c'est la meilleure façon, mais cela a fonctionné pour moi.
L'include_path paramètre fonctionne comme $PATH dans unix (il y a un paramètre similaire dans Windows aussi).Il contient de multiples noms de répertoires, séparés par des deux-points (:). Lorsque vous incluez ou besoin d'un fichier, ces répertoires sont recherchés dans l'ordre, jusqu'à ce qu'une correspondance est trouvée, ou de tous les répertoires sont recherchés.
Donc, assurez-vous que votre application inclut toujours à partir de votre chemin si le fichier existe, il vous suffit de mettre votre dir premier dans la liste des répertoires.
De cette façon, votre répertoire est recherché d'abord, puis l'original chemin de recherche (par défaut le répertoire courant, puis de POIRE). Si vous n'avez pas de problème de modification de l'include_path, alors c'est la solution pour vous.
php.ini
. Mais alors, vous ne pouvez pas déposer votre code sur une autre machine et espérer qu'il fonctionne sans faire cette étape de configuration, et peut-être que votre hébergeur ne vous laisse pas.Il n'y a rien dans inclure/besoin qui vous interdit d'utiliser absolue d'un chemin.
donc votre exemple
devrait fonctionner parfaitement. En supposant que le chemin d'accès et le fichier sont justes et les autorisations correctes ensemble.
(et ainsi vous permettre d'inclure tout fichier que vous voulez, dans ou en dehors de la racine du document)
Ce comportement est cependant considéré comme un possible risque de sécurité. Par conséquent, l'administrateur système peut définir la open_basedir directive.
La présente directive configure dans lequel vous pouvez inclure/besoin de vos fichiers à partir et c'est peut-être votre problème.
Certains panneaux de contrôle (plesk, par exemple, définir la présente directive, être la même que la racine du document par défaut.
comme pour le
'.'
syntaxe:Cependant, j'ai l'habitude de l'utiliser un peu différent en option:
Avec cette édition, vous spécifiez un chemin d'accès absolu, relatif) du fichier qui contient la
require_once()
déclaration.Une autre option est de créer un fichier dans le
$_SERVER['DOCUMENT_ROOT']
répertoire avec la définition de votre chemin d'accès absolu.Par exemple, si votre
$_SERVER['DOCUMENT_ROOT']
répertoire estcréer un fichier (c'est à dire
my_paths.php
) contenant cetteMaintenant vous avez seulement besoin d'inclure dans chaque fichier à l'intérieur de votre MyProyect dossier de ce fichier (
my_paths.php
), de sorte que vous pouvez l'utilisateurMY_ABS_PATH
un chemin absolu pour MyProject.De ne pas répondre directement à votre question, mais une chose à retenir:
à partir de: http://us2.php.net/manual/en/function.include.php#84052
salut à tous...j'ai eu un problème similaire avec mon système du cms.
j'avais besoin d'un dur chemin pour certains aspects de la sécurité.
pense que la meilleure façon, c'est comme rob a écrit. pour rapide et sale de codage
pense que cela fonctionne aussi..:-)
getcwd () points:
/usr/srv/apache/htdocs/myworkingdir (à titre d'exemple)
belle journée
strtok
J'ai suivi WordPress exemple sur celui-ci. Je vais définir un chemin d'accès racine, normalement à la racine du document, puis allez définir un tas d'autres du chemin le long de avec que (un pour chacun de mes classe dirs. C'est à dire: base de données, les utilisateurs, html, etc). Souvent, j'définir le chemin d'accès racine manuellement au lieu d'utiliser une variable de serveur.
Exemple
Grâce - c'est l'un des 2 liens que com si vous google pour php apache windows chemin d'accès absolu.
Comme un débutant à intermed développeur PHP, je n'ai pas de comprendre pourquoi des chemins absolus sur apache windopws les systèmes de c:\xampp\htdocs (apache racine du document - XAMPP par défaut) au lieu de /
ainsi, si dans http//localhost/myapp/subfolder1/subfolder2/myfile.php je voulais inclure un fichier à partir de l'adresse http//localhost/myapp
J'aurais besoin de préciser que:
include("c:\xampp\htdocs\myapp\includeme.php")
ou
include("../../includeme.php")
ET PAS
include("/myapp/includeme.php")
Je suis venu avec une seule ligne de code pour définir au-dessus de chacun de mes script php pour compenser:
Par ce bâtiment $racine des abeilles "../" marches à monter dans la hiérarchie, d'où le fichier est placé.
Chaque fois que je veux inclure un absolut chemin de la ligne sera:
Je n'aime pas vraiment, il semble comme une façon maladroite de le résoudre, mais il semble fonctionner quel que soit le système de php s'exécute sur et chaque fois que le fichier est placé, le rendant indépendant du système.
Pour atteindre des fichiers en dehors du répertoire web ajouter un peu plus
../
après$root
, par exemple$root."../external/file.txt"
.