40 votes

Que fait le point-slash aux appels d'inclusion PHP ?

A. A quoi cela sert-il ?

require ("./file.php");

B. par rapport à cela ?

require ("file.php");

(Son pas up-one-directory.. qui serait)

require ("../file.php");

48voto

Chris Lutz Points 34157

./ es el actuel répertoire. C'est en grande partie la même chose que file.php mais dans la plupart des cas (y compris celui-ci), il ne vérifie pas les endroits standards où PHP pourrait chercher un fichier, en vérifiant plutôt sólo le répertoire actuel.

De la Documentation PHP (remarquez la dernière phrase) :

Les fichiers à inclure sont d'abord recherchés dans chaque entrée include_path relative au répertoire de travail courant, puis dans le répertoire du script courant. Par exemple, si votre include_path est libraries, le répertoire de travail actuel est /www/, vous avez inclus include/a.php et il y a include "b.php" dans ce fichier, b.php est d'abord cherché dans /www/libraries/ et ensuite dans /www/include/. Si le nom du fichier commence par ./ ou ../, il est recherché uniquement dans le répertoire de travail actuel.

1 votes

Donc, le require ("./file.php") ; est plus rapide que require ("file.php") ; ?

9voto

Ionuț G. Stan Points 62482

La première version force le mécanisme interne à inclure des fichiers relativement au fichier... directement exécuté. Ainsi, par exemple, vous avez

index.php

// directly executed script (php -f index.php or from a browser)
include 'second.php';

second.php

// This is included relatively to index.php
// Actually, it is first searched relatively to include_path, then relatively
// to index.php
include './third.php';

troisième.php

// This is included relatively to second.php ONLY. It does not search
// include_path
return "foo";

0 votes

J'ai fait quelques erreurs que j'ai maintenant corrigées, l'ordre de recherche était incorrect. La preuve est la réponse au-dessus de la mienne.

0 votes

En third.php est en fait faux. third.php est en fait inclus relativement à index.php seulement. En fait, même cela est faux. Il est en fait inclus relativement à la le répertoire de travail actuel seulement. Par exemple, si index.php est situé à /var/www/index.php . Et vous vous rendez dans un autre répertoire, (ex. cd /var ) et ensuite vous essayez d'exécuter index.php por php www/index.php alors quand tu le feras include './third.php' php va essayer de le trouver dans /var et échoue s'il n'y est pas

7voto

danieltalsky Points 2897

La réponse courte

Vous avez raison, ce n'est pas un répertoire en haut. Un . fait référence au répertoire dans lequel vous êtes, et .. fait référence au répertoire parent.

Autrement dit, ./file.php et file.php sont fonctionnellement équivalents en PHP. Voici la page de documentation correspondante : http://us.php.net/manual/en/wrappers.file.php

La réponse la plus longue

Cependant, ce n'est pas parce qu'ils fonctionnent de la même manière dans ce contexte qu'ils sont toujours les mêmes.

Lorsque vous travaillez dans un environnement shell *nix et que vous tapez le nom d'un fichier exécutable, le shell consulte les répertoires PATH, mais pas le CWD, ni le répertoire dans lequel vous vous trouvez.

Ainsi, si vous vous trouvez dans un répertoire contenant un fichier appelé : myprogram.php (il s'agit d'un fichier PHP CLI) et que vous tapez simplement :

myprogram.php

il importe peu que votre programme soit exécutable ou non. L'interpréteur de commandes cherchera votre fichier dans /bin/, /usr/bin/, etc., mais il ne cherchera pas dans ./, ou le répertoire dans lequel vous vous trouvez.

Pour exécuter ce programme sans ajouter votre répertoire au PATH, vous devez taper

./myprogram

Donc en fait, ./ est plus explicite. Il signifie "le fichier que vous recherchez DOIT se trouver ici" et pas de ./ qui signifie "le fichier doit se trouver quelque part dans le programme qui recherche des fichiers".

5voto

Nerdling Points 3511

Le point-slash force le fichier à être trouvé dans le répertoire courant seulement, plutôt que de chercher en plus dans les chemins mentionnés dans le paramètre include_path.

4voto

Eineki Points 8632

Vous demandez simplement à php d'inclure le fichier dans le répertoire courant. sólo ou échouer si le fichier n'est pas présent.

Si vous utilisez le format "indexcommon3.php" et que le fichier n'est pas présent, php le cherchera dans la variable système include_path.

À titre de référence, vous pouvez utiliser http://www.php.net/manual/en/function.include.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X