par
Tracker » 26 oct. 2007, 01:34
[...] Avec dirname(__FILE__) tu vas récupérer le dossier du script incluant (que tu obtiendrais aussi bien avec " ./ ") [...]
En fait non, __FILE__ contient le chemin complet du fichier contenant la déclaration __FILE__, donc le script
inclus.
dirname(__FILE__) == './' seulement pour le script racine et les fichiers inclus contenus dans le même dossier de le script racine.
test1.php
<?php
header('content-type: text/plain');
echo 'racine ./:'.realpath('./')."\n";
echo 'racine __FILE__:'.realpath(dirname(__FILE__))."\n";
include 'forum/test2.php';
?>
forum/test2.php
<?php
echo 'include ./:'.realpath('./')."\n";
echo 'include __FILE__:'.realpath(dirname(__FILE__))."\n";
?>
Résultat
(identiques)
racine ./: L:\server\wstore\wroot\app1
racine __FILE__: L:\server\wstore\wroot\app1
(différents)
include ./: L:\server\wstore\wroot\app1
include __FILE__: L:\server\wstore\wroot\app1\forum
(racine serveur)
$_SERVER['DOCUMENT_ROOT']: L:\server\wstore\wroot
DOCUMENT_ROOT correspond effectivement à la racine du serveur quelque soit le chemin de la page appellée, donc oubliez dirname(__FILE__) et './'
Tracker.
[ps]
Le truc que je trouve quand même étrange en php, c'est que pour être rendue comme un saut de ligne la séquence \n (et surement d'autres) doit forcement être inscrite dans une chaine "interprétée". Pour résumer:
- "\n" fonctionne
- '\n' fonctionne pas ??!!
[quote="Ryle"][...] Avec dirname(__FILE__) tu vas récupérer le dossier du script incluant (que tu obtiendrais aussi bien avec " ./ ") [...][/quote]
En fait non, __FILE__ contient le chemin complet du fichier contenant la déclaration __FILE__, donc le script [b]inclus[/b].
dirname(__FILE__) == './' seulement pour le script racine et les fichiers inclus contenus dans le même dossier de le script racine.
[i]test1.php[/i]
[php]
<?php
header('content-type: text/plain');
echo 'racine ./:'.realpath('./')."\n";
echo 'racine __FILE__:'.realpath(dirname(__FILE__))."\n";
include 'forum/test2.php';
?>[/php]
[i]forum/test2.php[/i]
[php]
<?php
echo 'include ./:'.realpath('./')."\n";
echo 'include __FILE__:'.realpath(dirname(__FILE__))."\n";
?>[/php]
[i]Résultat[/i]
[quote]
[b](identiques)[/b]
racine ./: L:\server\wstore\wroot\app1
racine __FILE__: L:\server\wstore\wroot\app1
[b](différents)[/b]
include ./: L:\server\wstore\wroot\app1
include __FILE__: L:\server\wstore\wroot\app1\forum
[b](racine serveur)[/b]
$_SERVER['DOCUMENT_ROOT']: L:\server\wstore\wroot[/quote]
DOCUMENT_ROOT correspond effectivement à la racine du serveur quelque soit le chemin de la page appellée, donc oubliez dirname(__FILE__) et './'
Tracker.
[b][ps][/b]
Le truc que je trouve quand même étrange en php, c'est que pour être rendue comme un saut de ligne la séquence \n (et surement d'autres) doit forcement être inscrite dans une chaine "interprétée". Pour résumer:
- "\n" fonctionne
- '\n' fonctionne pas ??!!