7
votes

Où définir PHP $ _Server ['document_root'] Trailing Slash?

Parfois $ _ Server ['document_root'] retourne avec une barre oblique suivante. Dans d'autres environnements, ce n'est pas le cas. Où peut-il être spécifié?


4 commentaires

Je ne sais pas que peut être spécifié . Quels serveurs fonctionnent dans les différents environnements?


$ _ serveur ['document_root'] = sprintf ('% s /', rtrim ($ _ serveur ["document_root '],' / '));


@Alixaxel n'aurait-il pas que RTRIM a également potentiellement couper les espaces? Et si la racine du document a des espaces blanche?


Il ne fera que couper uniquement les espaces si vous n'utilisez pas le deuxième argument @cmcdragonkai.


7 Réponses :


1
votes

Je pense que cela dépend de la configuration du serveur si la racine Web est définie avec ou sans une barre oblique de passage. Vérifiez simplement que cela se trouve sur chaque système égal.

Voir aussi le ServerRoot-Directive du Documentation Apache.


0 commentaires

12
votes

Vous ne pouvez pas dire à l'avance si $ _ serveur ['document_root'] contient une barre oblique à la fin ou non.

normalement, si correctement configuré, il est pas contient une barre oblique de fuite. Sur Ubuntu (ainsi que sur un autre Unix), un chemin d'accès correctement écrit à un répertoire n'a pas le / à la fin. Sous Windows, par exemple, Apache refusera même de démarrer s'il est configuré avec un. Sur UNIX Apache n'est pas si difficile et permet une barre oblique traînante.

Mais il y a une exception, si vous faites votre répertoire racine ( / ) votre racine de document. En raison de cette affaire, vous ne pouvez pas dire à l'avance s'il contient ou non une barre oblique de fuite.

Dans tous les cas, il contient la valeur du DocumentOrot Directive < / a> - avec ou sans escalier Slash comme il a été écrit dans le fichier de configuration httpd. PHP ne prend que la valeur de Apache. Pour obtenir la racine de documents réel, utilisez realpath et / ou sous condition d'ajouter une barre oblique (ou retirez-la) à la fin si dans votre fichier de configuration ou dans votre code PHP.


1 commentaires

Merci beaucoup que les informations ont vraiment aidé, j'ai utilisé real_path pour résoudre le même problème



4
votes

J'ai tendance à utiliser le répertoire actuel plus que j'utilise Docroot car il fonctionne également bien sur la ligne de commande et dans les tests unitaires également. J'ai tendance à utiliser quelque chose comme: xxx

plutôt que: xxx

Je l'ai vu d'abord dans WordPress Source et il y a beaucoup aimé, mais ça peut conduire à beaucoup de "../" répétition.

ps Fichier Est-ce que le fichier actuel et le dirname se déshabilleront de la touche.php de la fin, laissant ainsi le chemin du répertoire contenant le fichier actuel.


0 commentaires

3
votes

Vous pouvez faire comme ça, afin de vous assurer que la barre oblique est toujours présente

'/'. Couper ($ _Server ['Document_root'], '/' < Pré> xxx


0 commentaires

0
votes

La réponse hakre est la bonne. J'ai essayé d'utiliser Inclure dans différentes situations, dans un script de console ou sur un serveur Web. Mon meilleur pari était d'utiliser un chemin absolu, en commençant par document_root. Mais j'étais toujours coincé à cause de cette barre oblique. Voici ce qui semble être une bonne solution:

include_once getenv ("document_root"). " ./ Web-Inf / Classes

Apprisez ensuite votre script avec PHP Test.php à partir d'un script de lot et mettez une valeur à Document_root env variable ou non, avec une barre oblique de fuite ou non. Lorsqu'il est chargé d'Apache, Getenv est déjà rempli.

Le moteur PHP peut gérer avec ././, en disant la même chose que ./. De la même manière, htdocs./ est interprété a HTDOCS / (sous Windows)


0 commentaires

0
votes

Une ancienne question, je sais, mais comme ça m'a donné une idée de la façon de résoudre ceci pour moi, je vais simplement ajouter ma solution ici. Je voulais définir une constante (rootpath) avec le $ _Server ["document_root"] et vous assurer qu'il a une barre oblique (Directory_Separator).

define('ROOTPATH', (!ctype_alnum(substr($_SERVER['DOCUMENT_ROOT'], -1)) ? substr($_SERVER['DOCUMENT_ROOT'], 0, -1) : $_SERVER['DOCUMENT_ROOT']));


0 commentaires

0
votes

Lorsque vous utilisez des hôtes virtuels, Apache écrit dans € _ Server ['Document_root'] La valeur de DocumentOrot de l'hôte virtuel. Donc, vous pouvez écrire de la barre oblique.

Mais ce n'est pas une bonne décision car différents tisers traitent ce paramédente différemment, votre application ne doit pas compter sur elle et doit déterminer la présence de slash de traction sans assistance.


0 commentaires