Le fichier actuel se trouve dans 2 constantes :
Les résultats sont un peu différents, __FILE__ est plus complet:
echo $REQUEST_URI;
renvoie :
/dossier/sousdossier/fichierquelconque.php
echo __FILE__;
renvoie :
/home/sites/site18/web/dossier/sousdossier/fichierquelconque.php
Notez que dans aucun des cas nous n'avons un URI qui commence par http://www...
ATTENTION : différence fondamentale entre les deux constantes $REQUEST_URI et __FILE__:
Imaginons le cas suivant :
<html><head>
<title></title> </head>
<body>
<? include ("testinclude.php");
?>
</body>
</html>
<?
echo "request_uri : ".$REQUEST_URI;
echo "<BR>";
echo "file : ".__FILE__;
?>
Que va-t-il afficher ? test.php ou testinclude.php ? En fait, voici l'affichage :
requesturi : /eclat2/test/test.php
file : /home/sites/site23/web/eclat2/test/testinclude.php
Donc, on va utiliser __FILE__ si on désire le nom du fichier inclus, et $REQUEST_URI si on veut le fichier appelant.
Pour n'avoir que le nom du fichier (la fin de l'URL, a partir
du dernier /, en excluant celui ci :
echo str_replace("/",
"", strrchr(__FILE__,"/"));
echo str_replace("/", "",
strrchr($REQUEST_URI,"/"));
Pour avoir le nom du fichier, sans son extension (machin de machin.inc.php par exemple) :
// Récupération
de la fin de la chaîne (dès le dernier / ):
$Fichier = str_replace("/", "", strrchr(__FILE__,"/"));
// ou $REQUEST_URI bien sûr
// On parcourt la chaîne jusqu'au premier point rencontré :
for ($Ctr=0 ;$Ctr<=strlen($Fichier);$Ctr++)
{
if ($Fichier[$Ctr] == ".") break;
$FichierSansExt = $FichierSansExt.$Fichier[$Ctr];
}
echo $FichierSansExt;
touch("monfichier.dat")
echo file_exists("trucmachin.txt");
rename("anciennom.txt" , "nouveaunom.txt");
$fichier="test.txt";
$ligne=file($fichier);
echo sizeof($ligne); // Nombre
de lignes
echo filesize($ligne); // Nombre
de caractères
$DossierCourant = opendir(".");
closedir($DossierCourant);
$DossierCourant = opendir(".");
$UnFichier = readdir($DossierCourant);
echo $UnFichier;
closedir($DossierCourant);
A chaque lecture de readdir($DossierCourant), on va avancer d'un fichier à afficher, comme ceci :
$DossierCourant = opendir(".");
$UnFichier
= readdir($DossierCourant);
echo $UnFichier , "<BR>";
$UnFichier = readdir($DossierCourant);
echo $UnFichier
, "<BR>";
$UnFichier
= readdir($DossierCourant);
echo $UnFichier
, "<BR>";
$UnFichier = readdir($DossierCourant);
echo $UnFichier
, "<BR>";
closedir($DossierCourant);
Affichera selon le contenu du dossier courant :
.
..
UnFichierQuelconque.htm
UnAutreFichierExemple.php
Nous avons vu qu'a chaque appel de readdir, on avance d'un fichier. Vient un moment ou tout le dossier courant a été parcouru. Dès ce moment, $UnFichier = readdir($DossierCourant); ne contient plus rien. C'est cette particularité que nous allons utiliser avec while : Nous allons en une seule ligne affecter la variable $UnFichier=readdir($DossierCourant), et la comparer avec une chaîne vide : <> "".
$DossierCourant = opendir(".");
while (($UnFichier=readdir($DossierCourant))
<> "")
echo $UnFichier , "<BR>";
closedir($DossierCourant);
Et, en fait, nous n'avons pas besoin de faire la comparaison <> "", car la simple affectation $UnFichier=readdir($DossierCourant) suffit à ce que la comparaison soit vraie. L'écriture condensée suivante est suffisante, et très usitée :
$DossierCourant = opendir(".");
while ($UnFichier=readdir($DossierCourant))
echo $UnFichier , "<BR>";
closedir($DossierCourant);
L'affichage sera le suivant selon le contenu du dossier:
.
..
index.htm
MachinBidule.php
FichierDebile.php
Oulala.txt
$DossierCourant = opendir(".");
while (($UnFichier=readdir($DossierCourant)) <> "")
{
if (($UnFichier <> ".")
&& ($UnFichier <> ".."))
echo $UnFichier , "<BR>";
}
closedir($DossierCourant);
Il s'agit d'abord de se remémorer la syntaxe HTML pour créer
un lien hypertexte :
<a
href="UnFichierDebile.htm">Cliquez ici pour aller au
fichier débile</a>
Maintenant, c'est un jeu d'enfant de faire l'affichage en utilisant la concaténantion :
if (($UnFichier <>
".") && ($UnFichier <> ".."))
echo "<A HREF=" , $UnFichier
, ">" ,
$UnFichier , "</A><BR>";
Il y a 2 fois $UnFichier, une fois pour faire le lien hypertexte, et une fois pour l'afficher.
Il s'agit de récupérer l'ensemble des fichiers qui se terminent par .htm. Pour ce faire, nous allons utiliser la fonction de recherche de chaîne eregi, telle qu'elle est expliquée dans le chapitre Chaînes de caratères.
Rappel :
eregi ("(.*).htm"
, "MachinBidule.htm" , $Stockage);
echo $Stockage[1];
va afficher
MachinBidule
Et si le fichier ne se terminait pas par .htm, l'affichage aurait été ... Rien du tout !
Voici le code complet final de l'ensemble de tous les fichiers se terminant par .htm, avec un lien hypertexte qui pointe vers eux
$DossierCourant = opendir(".");
while (($UnFichier=readdir($DossierCourant)) <> "")
{
if (($UnFichier <> ".") && ($UnFichier <>
".."))
{
eregi ("(.*).htm" , $UnFichier , $Stockage);
if ($Stockage[1])
echo "<A HREF=" , $UnFichier
, ">" , $UnFichier , "</A><BR>";
}
}
closedir($DossierCourant);
---