Php ajoutant des données au fichier. Travailler avec des fichiers en php : ouverture, écriture, lecture

À propos de l'utilisation des fonctions fopen, fclose, feof, fgets, fgetss et fscanf

Listons toutes les possibilités

L'un des avantages de travailler avec des langages de programmation modernes tels que PHP est le montant opportunités disponibles. PHP pourrait facilement adopter la devise de Perl : « Il existe plusieurs façons de faire quelque chose », notamment lorsqu'il s'agit de traitement de fichiers. Mais avec abondance fonds disponibles, la question est de savoir lequel est le meilleur pour faire le travail. Bien sûr, la réponse à cette question dépend vraiment de vos objectifs lors du traitement du fichier, donc apprendre toutes les capacités du langage vaut la peine.

Méthodes fopen traditionnelles

Les méthodes fopen sont peut-être les plus familières aux programmeurs C et C++ d'autrefois, car ce sont plus ou moins les outils qui sont à votre portée depuis des années si vous avez travaillé avec ces langages de programmation. Pour chacune de ces méthodes, vous suivez la procédure standard, en utilisant fopen pour ouvrir le fichier, une fonction pour lire les données, puis fclose pour fermer le fichier, comme indiqué dans le listing 1.

Listing 1. Ouverture et lecture d'un fichier à l'aide de fgets
$file_handle = fopen("monfichier", "r"); while (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

Bien que ces fonctions soient familières aux programmeurs les plus expérimentés, permettez-moi d'analyser leur fonctionnement. En réalité, vous suivez ces étapes :

  1. Ouvrez le fichier. $file_handle stocke un lien vers le fichier lui-même.
  2. Vérifiez si vous avez atteint la fin du fichier.
  3. Continuez à lire le fichier jusqu'à la fin, en imprimant chaque ligne que vous lisez.
  4. Fermez le fichier.

Dans cet esprit, je vais examiner chaque fonction de fichier utilisée ici.

fonction fopen

La fonction fopen établit une connexion à un fichier. Je dis « établit une connexion » car, en plus d'ouvrir un fichier, fopen peut aussi ouvrir une URL :

$fh = fopen("http://127.0.0.1/", "r");

Cette ligne de programme crée un lien vers la page ci-dessus et vous permet de commencer à la lire sous forme de fichier local.

Note: L'option "r" utilisée dans fopen indique que le fichier est ouvert en lecture seule. Étant donné que l'écriture dans un fichier n'est pas incluse dans le cadre des problèmes abordés dans cet article, je ne listerai pas toutes les valeurs possibles du paramètre. Cependant, vous devez remplacer « r » par « rb » si vous lisez des fichiers binaires pour des raisons de compatibilité multiplateforme. Vous trouverez ci-dessous un exemple de ce type.

fonction feof

La commande feof détermine si la lecture a atteint la fin du fichier et renvoie True ou False. La boucle affichée dans continue jusqu'à la fin du fichier "monfichier". Notez que feof renvoie également False si vous lisez une URL et que la connexion expire car il n'y a plus de données à lire.

Fonction fclose

Sautons le milieu du listing 1 et allons à la fin ; fclose fait le contraire de fopen : il ferme la connexion au fichier ou à l'URL. Après avoir exécuté cette fonction, vous ne pourrez plus lire à partir du fichier ou du socket.

fonction fgets

En remontant quelques lignes dans le listing 1, vous arrivez au cœur du processus de traitement du fichier : la lecture réelle du fichier. La fonction fgets est votre arme de choix pour le premier exemple. Il récupère une ligne de données d'un fichier et la renvoie sous forme de chaîne. À partir de là, vous pouvez afficher les données ou les traiter d'une autre manière. L'exemple du listing 1 imprime l'intégralité du fichier.

Si vous décidez de limiter la taille du bloc de données avec lequel vous travaillez, vous pouvez ajouter un argument à fgets pour limiter longueur maximale lignes de données capturées. Par exemple, utilisez le code suivant pour limiter la longueur d'une ligne à 80 caractères :

$string = fgets($file_handle, 81);

Pensez à "\0", l'indicateur de fin de ligne en C, et définissez la longueur sur un caractère plus long que ce dont vous avez réellement besoin. Comme vous pouvez le constater, l’exemple ci-dessus utilise 81 caractères, alors qu’il vous faut 80 caractères. Prenez l'habitude d'ajouter un caractère supplémentaire chaque fois que vous devez définir une limite de longueur de ligne pour une fonction donnée.

fonction fread

La fonction fgets n'est qu'une des nombreuses fonctions disponibles pour lire un fichier. C'est l'une des fonctions les plus couramment utilisées, car le traitement d'un fichier ligne par ligne est dans la plupart des cas le plus logique. En fait, plusieurs autres fonctionnalités offrent des capacités similaires. Quoi qu’il en soit, l’analyse ligne par ligne n’est pas toujours ce dont vous avez besoin.

Et ici, nous accédons à fread . La fonction fread a un objectif légèrement différent de celui de fgets : elle est destinée à lire à partir de fichiers binaires (c'est-à-dire des fichiers qui ne sont pas initialement constitués de texte lisible par l'homme). Étant donné que le concept de « lignes » n'est pas pertinent pour les fichiers binaires (les structures de données logiques ne sont généralement pas divisées en lignes), vous devez spécifier le nombre d'octets à lire.

$fh = fopen("monfichier", "rb"); $data = fread($file_handle, 4096);

L'exemple ci-dessus lit 4 096 octets (4 Ko) de données. Notez que, quelle que soit la valeur que vous spécifiez, fread lira un maximum de 8 192 octets (8 Ko).

En supposant que le fichier ne dépasse pas 8 Ko, l'extrait de programme ci-dessous devrait lire l'intégralité du fichier sur une seule ligne.

$fh = fopen("monfichier", "rb"); $data = fread($fh, filesize("monfichier")); fclose($fh);

Si la taille du fichier est plus grande, vous devrez utiliser une boucle pour lire le reste.

fonction fscanf

Pour en revenir au traitement des chaînes, fscanf est également le successeur de la fonction traditionnelle de bibliothèque de fichiers C. Si vous ne la connaissez pas, fscanf lit les champs de données dans les variables d'un fichier.

liste ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

Les chaînes de format utilisées dans cette fonction sont décrites dans de nombreuses sources telles que PHP.net, je ne répéterai donc pas ces informations ici. Il suffit de dire que le formatage des chaînes est très flexible. Il faut également mentionner que tous les champs sont placés dans la variable renvoyée par la fonction. (En C, ceux-ci seraient passés comme arguments.)

fonction fgetss

La fonction fgetss est différente des fonctions traditionnelles de manipulation de fichiers et vous permet de mieux comprendre les capacités de PHP. Cela fonctionne comme fgets, mais rejette tout ce qu'il trouve. Balises HTML ou PHP, ne laissant que le texte brut. Prenons le fichier HTML ci-dessous.

Listing 2. Exemple de fichier HTML
Mon titre

Si vous comprenez ce que signifie "Parce qu'il n'y a personne pour vous donner aucune douleur", alors vous écoutez trop le groupe America.



Passons-le via la fonction fgetss.

Listing 3. Utilisation de fgetss
$file_handle = fopen("monfichier", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

Voici ce que vous obtiendrez en sortie :

Mon titre Si vous comprenez ce que signifie "Parce qu'il n'y a personne pour vous donner aucune douleur" alors vous écoutez trop le groupe America.

fonction fpassthru

Quelle que soit la manière dont vous lisez les données d'un fichier, vous pouvez imprimer les données restantes à l'aide du canal de sortie standard à l'aide de la fonction fpassthru.

fpassthru($fh);

Cette fonction imprime les données afin que vous n'ayez pas à les mettre dans une variable.

Traitement de fichiers non linéaire : déplacement dans un fichier

Bien entendu, les fonctions décrites ci-dessus vous permettent uniquement de lire un fichier de manière séquentielle. Les fichiers plus complexes peuvent nécessiter le déplacement vers différentes parties du fichier au début ou à la fin du fichier. Pour ce faire, vous avez besoin de la fonction fseek.

fcherche($fh, 0);

L'exemple ci-dessus remonte au début du fichier. Si vous ne souhaitez pas aller au tout début du fichier - disons, un kilo-octet suffit - vous écrivez simplement :

fcherche($fh, 1024);

Depuis PHP V4.0, plusieurs autres options sont également disponibles. Par exemple, si vous devez avancer de 100 octets par rapport à votre position actuelle, vous pouvez utiliser le code suivant :

fseek($fh, 100, SEEK_CUR);

De même, reculer de 100 octets se fait par :

fseek($fh, -100, SEEK_CUR);

Si vous souhaitez revenir à la position 100 octets avant la fin du fichier, utilisez plutôt SEEK_END.

fseek($fh, -100, SEEK_END);

Une fois la nouvelle position atteinte, vous pouvez utiliser fgets, fscanf ou une autre fonction pour lire les données.

Note: vous ne pouvez pas utiliser fseek sur les descripteurs de fichiers faisant référence à une URL.

Capturer un fichier entier

Nous passons maintenant à certains des opportunités uniques PHP pour le traitement de fichiers : traitement de gros blocs de données sur une ou deux lignes. Par exemple, comment pouvez-vous récupérer un fichier et afficher l’intégralité de son contenu sur votre page Web ? Eh bien, vous avez vu un exemple d'utilisation d'une boucle avec fgets. Mais comment rendre les choses plus faciles ? Le processus est presque ridiculement simple en utilisant fgetcontents, qui met le fichier entier sur une ligne.

$mon_fichier = file_get_contents("monnom de fichier"); echo $mon_fichier ;

Bien que ce ne soit pas la meilleure option, vous pouvez écrire cette commande encore plus courte :

echo file_get_contents("monnom de fichier");

Cet article est principalement consacré au traitement fichiers locaux Cependant, il convient de noter que vous pouvez également capturer, afficher et analyser d'autres pages Web à l'aide des fonctions décrites.

echo file_get_contents("http://127.0.0.1/");

Cette commande est en fait la même que :

$fh = fopen("http://127.0.0.1/", "r"); fpassthru($fh);

Vous regardez peut-être ces exemples et pensez : « Cela représente beaucoup de travail ». Les développeurs PHP sont d'accord avec vous. Vous pouvez donc raccourcir la commande ci-dessus en :

readfile("http://127.0.0.1/");

La fonction readfile affiche l'intégralité du contenu d'un fichier ou d'une page Web dans le tampon de sortie par défaut. Par défaut, cette commande affiche un message d'erreur en cas d'échec. Pour éviter ce comportement (si vous le souhaitez), essayez la commande :

@readfile("http://127.0.0.1/");

Bien sûr, si vous devez traiter le contenu des fichiers, la seule ligne renvoyée par file_get_contents est probablement trop longue. Vous souhaiterez peut-être d’abord le diviser en parties à l’aide de la fonction split().

$array = split("\n", file_get_contents("monfichier"));

Mais pourquoi avez-vous besoin de toute cette complexité s’il existe une fonction parfaitement adaptée qui fera le travail à votre place ? La fonction PHP file() accomplit cette tâche en une seule étape : elle renvoie un tableau de chaînes dont les éléments sont les lignes du fichier.

$array = fichier("monfichier");

Il convient de noter qu'il existe une légère différence entre les deux exemples ci-dessus. La commande split supprime les nouvelles lignes, tandis que la commande file termine les lignes du tableau par des nouvelles lignes (tout comme fgets).

Les capacités de PHP vont cependant bien au-delà de celles décrites ci-dessus. Vous pouvez analyser des fichiers .ini entiers dans le style PHP avec une seule commande parse_ini_file. La commande parse_ini_file s'applique aux fichiers similaires à ceux présentés dans le listing 4.

Listing 4. Exemple de fichier .ini
; Nom du commentaire = Quête "Roi Arthur" = Pour chercher le Saint Graal Couleur préférée = Bleu Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Les commandes suivantes représentent un fichier sous forme de tableau, puis impriment le tableau :

$file_array = parse_ini_file("holy_grail.ini"); print_r $file_array;

Le résultat sera le résultat suivant :

Listing 5. Sortie
Array ( => Roi Arthur => Pour chercher le Saint Graal => Bleu => Mark Twain => Whoopi Goldberg)

Bien entendu, vous remarquerez peut-être que cette commande a fusionné les sections. Il s'agit de l'action par défaut, mais vous pouvez facilement la faire paramètres nécessaires, en utilisant le deuxième argument de parse_ini_file : process_sections, qui est une variable booléenne. Définissez process_sections sur True.

$file_array = parse_ini_file("holy_grail.ini", true); print_r $file_array;

Et votre résultat ressemblera à :

Listing 6. Sortie
Array ( => Array ( => Roi Arthur => Pour chercher le Saint Graal => Bleu) => Array ( => Mark Twain => Whoopi Goldberg))

PHP place les données dans un tableau multidimensionnel facilement analysable.

Mais ce n’est que la pointe de l’iceberg en matière de traitement de fichiers en PHP. Des fonctions plus complexes telles que Tidy_parse_file et xml_parse peuvent vous aider à analyser respectivement les documents HTML et XML. Référez-vous à la section pour en savoir plus des informations détaillées sur le fonctionnement de ces fonctions. Les deux valent la peine d'être pris en compte si vous travaillez avec des fichiers types spécifiés, mais au lieu de considérer tous les types de fichiers possibles, vous pouvez lire attentivement le contenu de cet article, où il existe plusieurs bons règles générales pour travailler avec les fonctions que j'ai décrites jusqu'à présent.

Bon style de programmation

Ne présumez jamais que tout dans votre programme fonctionnera comme prévu. Par exemple : que se passe-t-il si le fichier que vous recherchez a été déplacé ? Que se passe-t-il si une modification d'autorisation vous empêche de lire le contenu d'un fichier ? Vous pouvez vérifier l'existence d'un fichier et les droits de lecture à l'avance en utilisant les méthodes file_exists et is_readable.

Listing 7. Utilisation de file_exists et is_readable
$filename = "monfichier" ; if (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # Traitement fclose($fh); )

Cependant, dans la pratique, ce programme sera probablement excessif pour votre tâche. La gestion des valeurs renvoyées par fopen est plus simple et plus précise.

if ($fh = fopen($filename, "r")) ( # Traitement fclose($fh); )

Puisque fopen renvoie False en cas d'échec, cela garantira que le fichier ne sera traité que s'il peut être ouvert. Bien entendu, si le fichier n’existe pas ou est illisible, vous vous attendez à ce que la valeur de retour soit négative. Un tel contrôle est donc un piège dans lequel tout le monde tombe potentiellement. problèmes possibles. Alternativement, vous pouvez quitter le programme ou afficher un message d'erreur si le fichier ne peut pas être ouvert.

Comme fopen, les fonctions file_get_contents, file et readfile renvoient False si le fichier ne peut pas être ouvert ou traité. Les fonctions fgets, fgetss, fread, fscanf et fclose renvoient également False si une erreur se produit. Bien sûr, à l’exception de fclose , vous avez probablement déjà traité les résultats renvoyés. Quant à fclose , il n'y a pas grand chose à faire si le descripteur de fichier ne se ferme pas correctement, donc vérifier la valeur de retour de fclose est généralement excessif.

Le choix t'appartient

PHP ne manque pas de moyens efficaces pour lire et analyser des fichiers. Les fonctions classiques comme fread peuvent vous servir de manière fiable la plupart du temps, ou vous pouvez être plus attiré par la simplicité de readfile si c'est ce dont vous avez besoin pour faire le travail. Le choix dépend vraiment de ce que vous essayez d’accomplir.

Si vous traitez de grandes quantités de données, vous trouverez probablement fscanf plus utile et efficace que, par exemple, l'utilisation de file en combinaison avec les commandes split et sprintf suivantes. Si vous affichez simplement une grande quantité de texte avec des modifications mineures, l'utilisation des fonctions file , file_get_contents ou readfile peut être plus logique. Cette solution sera probablement correcte lors de l'utilisation de PHP pour la mise en cache ou même lors de la création d'un serveur proxy temporaire.

PHP fournit de nombreux outils pour travailler avec des fichiers. Apprenez à mieux les connaître et découvrez quels outils conviennent le mieux au projet sur lequel vous travaillez. Un large choix d'outils logiciels vous est proposé, utilisez-les le plus efficacement possible et amusez-vous à traiter vos fichiers avec PHP.

Chaque programmeur devrait être capable de travailler correctement avec des fichiers. Cet article est destiné à PHP débutants programmeurs, mais la « collection de recettes » sera également utile aux utilisateurs avancés.

Le travail avec des fichiers est divisé en 3 étapes :

  1. Ouverture d'un fichier.
  2. Manipulation de données.
  3. Fermeture du dossier.

je. Ouvrir un fichier

Pour ouvrir un fichier dans l'environnement PHP, utilisez la fonction fopen(). Les paramètres requis pour cette fonction sont le nom du fichier et le mode du fichier.

$fp = fopen("counter.txt", "r");

Selon la documentation PHP, on distingue les types de modes de fichiers suivants :

  1. r – ouvre le fichier en lecture seule.
  2. r+ - ouvre un fichier pour lire et écrire en même temps.
  3. w – en créer un nouveau fichier vide. Si un tel fichier existe déjà au moment de l'appel, il est détruit.
  4. w+ - similaire à r+, seulement si un tel fichier existe au moment de l'appel, son contenu est supprimé.
  5. a – ouvre un fichier existant en mode écriture, avec le pointeur déplacé vers le dernier octet du fichier (vers la fin du fichier).
  6. a+ - ouvre un fichier en mode lecture-écriture, avec le pointeur décalé sur le dernier octet du fichier (jusqu'à la fin du fichier). Le contenu du fichier n'est pas supprimé.

Remarque : Il peut y avoir un paramètre facultatif supplémentaire à la fin de n'importe laquelle des lignes : b ou t . Si b est spécifié, le fichier est ouvert en mode lecture/écriture binaire. Si t , alors le mode de traduction de saut de ligne est défini pour le fichier, c'est-à-dire il est perçu comme textuel.

Pour le démontrer, considérons le scénario suivant :

//Ouvre un fichier dans différents modes
$fp = fopen("counter.txt", "r"); // Mode binaire
$fp = fopen("counter.txt", "rt"); // Mode texte
$fp = fopen("http://www.yandex.ru", "r");// Ouvre une connexion HTTP pour la lecture
$fp = fopen("ftp://utilisateur : [email protégé]", "w"); //Ouvre une connexion FTP en indiquant le login et le mot de passe
?>

II. Manipulation des données de fichiers

Écrire les données dans un fichier lorsque Aide PHP possible en utilisant la fonction fécrire(). Cette fonction prend 2 paramètres obligatoires et 1 optionnel. Les paramètres requis sont le descripteur de fichier et le mode du fichier :

$fp = fopen("counter.txt", "a"); // Ouvre le fichier en mode écriture
$mytext = "Nous devons écrire cette ligne\r\n"; // Chaîne source
$test = fwrite($fp, $montexte); // Écrit dans un fichier
if ($test) echo "Les données ont été saisies avec succès dans le fichier.";
else echo "Erreur d'écriture dans le fichier.";
fclose($fp); //Ferme le fichier
?>

Pour lire un fichier ligne par ligne, utilisez la fonction fgets(). La fonction prend 2 paramètres obligatoires :


si ($fp)
{
tandis que (!feof($fp))
{
$montexte = fgets($fp, 999);
echo $montexte."
";
}
}

fclose($fp);
?>

Remarque : Dans cet exemple, la valeur 999 spécifie le nombre de caractères qui seront lus jusqu'à ce que le pointeur atteigne la fin du fichier (EOF).

Afin de lire le fichier dans son ensemble, vous devez utiliser la fonction lire le fichier(), qui prend 1 paramètre obligatoire. La fonction ouvre un fichier, affiche son contenu dans une fenêtre de navigateur, puis ferme le fichier :

echoreadfile("compteur.txt");
?>

Vous pouvez également utiliser la fonction fpassthru() qui prend 1 paramètre obligatoire. Avant d'utiliser cette fonctionnalité, vous devez ouvrir le fichier en mode Lecture. Lorsque la lecture du fichier est terminée, la fonction ferme automatiquement le fichier (et le descripteur de fichier devient invalide).

$fp = fopen("counter.txt", "r"); // Ouvre le fichier en mode lecture
if ($fp) echo fpassthru($fp);
elseecho "Erreur d'ouverture du fichier" ;
?>

Très souvent, il existe des situations où il est nécessaire de lire le contenu d'un site dans un tableau. Cette fonctionnalité implique d'utiliser la fonction déposer(). Lorsque cette fonction est appelée, chaque ligne du fichier sera stockée dans élément séparé le tableau spécifié.

Remarque : La fonction ne doit pas être utilisée déposer() aux fichiers binaires (binary-safe), car Il n'est pas sûr de lire des fichiers binaires, et s'il rencontre un caractère de fin de fichier (EOF) quelque part, cela ne garantit pas que vous lirez l'intégralité du fichier binaire.

$file_array = file("counter.txt"); // Lit le fichier dans $file_array
// Travailler avec des données de tableau
?>

Remarque : L'utilisation de tableaux est décrite en détail, auteurs : Mukhametshin D.F., Simdyanov I.V.

À la fin de l’article, vous trouverez un bon « livre de recettes » sur les tableaux, qui apporte des solutions à de nombreux problèmes qu’un programmeur web rencontre au quotidien.

Imaginons une situation où un fichier doit être lu caractère par caractère. Pour ce faire, nous pouvons utiliser la fonction fgetc(). La fonction prend un seul paramètre. La fonction est utile si nous avons besoin de trouver un caractère ou le nombre de caractères identiques.

$fp = fopen("counter.txt", "r"); // Ouvre le fichier en mode lecture
si ($fp)
{
pendant que(!feof($fp))
{
$char = fgetc($fp);
if ($char == "c") $i = $i + 1;// Trouver le caractère "c"
}
echo "Nombre de lettres 'c' dans le fichier : ". $je;
}
else echo "Erreur d'ouverture du fichier" ;
?>

III. Fermer un dossier

Le fichier est fermé à l'aide de la fonction fclose(), qui prend 1 paramètre obligatoire.

$fp = fopen("counter.txt", "r");
si ($fp)
{
echo "Le fichier est ouvert";
fclose($fp); // Fermeture du fichier
}
?>

Recueil de recettes

1) Nous devons vérifier si tel ou tel fichier existe. Pour ce faire, nous utiliserons la fonction le fichier existe().

monfichier("compteur.txt"); // Utilise la fonction monfichier, en passant le nom du fichier en argument

function monfichier($name) //Créer une fonction pour vérifier l'existence d'un fichier
{
if (file_exists($name)) echo "Le fichier existe" ;

}
?>

Remarque : Fonction le fichier existe ne vérifie pas les fichiers sur le serveur Web distant. Pour bon fonctionnement fonctions, le fichier avec le script doit être situé sur le même serveur que le fichier en cours de vérification.

2) Déterminez la taille du fichier à l'aide de la fonction taille du fichier()

monfichier("compteur.txt");

function myfile($name) //Créer une fonction pour vérifier l'existence d'un fichier et déterminer la taille du fichier
{
if (file_exists($name)) echo "Taille du fichier : ".filesize($name)." octets" ;
else echo "Le fichier n'existe pas" ;
}
?>

3) Créez un fichier temporaire à l'aide de la fonction fichier tmp()

$monfichier = tmpfile();
fwrite($myfile, "Cette ligne est écrite dans un fichier temporaire."); // Écrit dans un fichier temporaire
fseek($monfichier, 0); // Définit le pointeur de fichier
echo fread($monfichier, 1024); // affiche le contenu du fichier
?>

4) Vous devez déterminer le nombre de lignes dans le fichier. Pour ce faire, nous utilisons la fonction compter()

$fp = fichier("compteur.txt");
echo "Nombre de lignes dans le fichier : ".count($fp);
?>

5) Nous devons utiliser un mécanisme de verrouillage de fichiers

$fp = fopen("counter.txt", "a");
troupeau ($fp, LOCK_EX); // Verrouille le fichier en écriture
fwrite($fp, "Ligne à écrire");
troupeau ($fp, LOCK_UN); // Déverrouiller
fclose($fp);
?>

6) Nous devons supprimer une certaine ligne du fichier

$num_stroka = 5 ; //Supprimer la ligne 5 du fichier
$file = file("compteur.txt"); // Lit le fichier entier dans un tableau

pour($i = 0; $i< sizeof($file); $i++)
if($i == $num_stroka) unset($file[$i]);

$fp = fopen("counter.txt", "w");
fputs($fp, implode("", $file));
fclose($fp);
?>

7) Détermination du type de fichier. Utilisation de la fonction

Et maintenant, il y aura une leçon assez longue, mais pas compliquée, sur le travail avec des fichiers en PHP. Tout d'abord, à quoi servent les fichiers ? Après tout, vous pouvez tout stocker dans la base de données Données MySQL ou PostgreSQL ou tout autre. Mais parfois, il y a des tâches pour lesquelles l'utilisation d'une base de données, avec tous les traitements et le souci de sécurité des connexions, n'est pas recommandée. Par exemple, nous devons créer un compteur régulier, mais avant cela, nous n'utilisions pas de base de données dans le projet. Alors, pour le bien d’un petit compteur, devrions-nous créer une base de données et y stocker seulement quelques lignes ? Il est beaucoup plus facile d'utiliser des fichiers ici. De plus, parfois l’hébergement ne prend pas du tout en charge les bases de données, alors les fichiers sont généralement la seule option.

Eh bien, disons que je vous ai convaincu que les fichiers sont nécessaires :) Voyons maintenant comment travailler avec eux. Comment créer, ouvrir, écrire, écraser, lire, etc. Tout d'abord.

Créer un fichier

PHP utilise la fonction fopen pour ouvrir des fichiers. Cependant, il peut également créer des fichiers. Si vous transmettez à fopen un nom de fichier qui n'existe pas, il le créera.

La fonction fopen elle-même prend deux paramètres, tous deux obligatoires. Tout d’abord, nous devons spécifier le nom du fichier que nous voulons ouvrir. Deuxièmement, transmettez un paramètre qui indique à la fonction ce que nous prévoyons de faire avec ce fichier (par exemple, lire le fichier, écrire, etc.).

Si nous devons créer un fichier, nous spécifions son nom et transmettons le paramètre dans lequel nous voulons y écrire des données. Remarque : Nous devons nous assurer d'indiquer à PHP ce que nous écrivons dans le fichier, sinon il ne créera pas de nouveau fichier.
Exemple:

$ourFileName = "testFile.txt" ; $ourFileHandle = fopen($ourFileName, "w") ou die("impossible d'ouvrir le fichier"); fclose($ourFileHandle);

La première ligne $ourFileName = testFile.txt crée un dans lequel nous stockerons le nom du fichier.
La deuxième ligne $ourFileHandle = fopen($ourFileName, 'w') ou die("can't open file") crée ou ouvre respectivement un fichier existant en écriture. Ou il renvoie un message indiquant qu'il ne peut pas ouvrir le fichier.
La troisième ligne fclose ($ ourFileHandle) ferme le fichier. C'est en fait simple.

Options d'ouverture de fichiers en php

  • Le premier paramètre 'r' (lecture) - ouvre le fichier en lecture seule ; vous ne pouvez pas y écrire.
  • Le deuxième paramètre « w » (écriture) – s’ouvre en écriture. Dans ce cas, l'enregistrement se fera toujours depuis le début du fichier. S'il y a déjà des informations, elles seront écrasées.
  • Le troisième paramètre 'a' (append) - ouvre le fichier en écriture, mais s'ajoutera à la fin du fichier, contrairement à w.

Options avancées:

  • Paramètre 'r+' - s'ouvre à la fois en lecture et en écriture. Le pointeur sera au début du fichier.
  • Paramètre 'w+' - s'ouvre en lecture et en écriture, MAIS supprime toutes les informations contenues dans le fichier !!!
  • paramètre 'a+' - s'ouvre en lecture et en écriture, mais le pointeur sera à la fin du fichier.

Bien entendu, un seul de ces paramètres peut être transmis à une fonction, et non plusieurs. Ils doivent être remplacés à la place de « X » :

Fopen ($ notre nom de fichier, "X")

Écrire dans un fichier

Eh bien, maintenant que nous avons ouvert le fichier, sélectionné le paramètre dont nous avons besoin, et ensuite ? Vous devez y écrire quelque chose. Comment faire? Utilisation de la fonction fwrite, qui prend en paramètres un pointeur vers un fichier et une ligne de texte que l'on souhaite écrire. Exemple:

$monFichier = "testFile.txt" ; $fh = fopen($myFile, "w") ou die("impossible d'ouvrir le fichier"); $stringData = "Première ligne\n"; fwrite($fh, $stringData); $stringData = "Deuxième ligne\ n n"; fwrite($fh, $stringData); fclose($fh);

Nous avons créé un fichier testFile.txt, le pointeur vers celui-ci est stocké dans la variable $fn. Nous y avons écrit la ligne « Première ligne » (en appliquant le symbole de fin de ligne \n à la fin), puis « Deuxième ligne ». Puis ils ont fermé le dossier.

ATTENTION! N'oubliez jamais de fermer vos fichiers ! Sinon, si l'exécution du script se termine anormalement, les données contenues dans les fichiers ne seront pas sauvegardées ! Utilisez toujours fclose après le travail !!!

Lecture à partir d'un fichier

Nous l'avons écrit, lisons-le maintenant ! Ce n'est pas si difficile non plus. Nous utilisons la fonction fread. En entrée, nous lui donnons un pointeur vers le fichier et le nombre d'octets que nous voulons lire. Par exemple, un caractère équivaut à un octet (selon l'encodage), nous voulons lire 5 caractères : $theData = fread($fh, 5).
Mais si nous avons besoin d'obtenir toutes les informations contenues dans le fichier, nous aurons alors besoin de la fonction filesize, qui renvoie le nombre d'octets dans le fichier, donc, si le résultat de la fonction filesize est transmis à fread, alors nous le ferons récupérer toutes les informations du fichier :

$monFichier = "testFile.txt" ; $fh = fopen($monFichier, "r"); $theData = fread($fh, taille du fichier($monFichier)); fclose($fh); echo $theData;

J'espère l'avoir expliqué clairement.
Parfois, il est utile de lire un fichier ligne par ligne, et non par nombre d'octets. Pour ce faire, au lieu de fread il vous suffit d'utiliser fgets :

$monFichier = "testFile.txt" ; $fh = fopen($monFichier, "r"); $theData = fgets($fh); fclose($fh); echo $theData;

En conséquence, nous obtenons la première ligne du fichier testFile.txt. Ainsi, pour parcourir toutes les lignes, vous devez utiliser :

\n"; ?>

Vous savez maintenant comment ouvrir des fichiers en lecture, en écriture ou les deux. Écrivez-y des données ou ajoutez-les par-dessus à l'aide de Append, et lisez également des informations qu'elles contiennent.

Sous travailler avec des fichiers en PHP implicite lecture à partir d'un fichier Et écrire dans un fichier diverses informations. Il est évident qu'il faut beaucoup travailler avec des fichiers, donc tout Programmeur PHP doit être capable de lire à partir d'un fichier Et écrire dans un fichier.

Sous-séquence travailler avec des fichiers en PHP comme ça:

  1. Fichier ouvert.
  2. Effectuez les actions nécessaires.
  3. Fermez le fichier.

Comme vous pouvez le voir, la séquence de travail avec des fichiers ressemble à celle de travailler avec des fichiers via un explorateur classique. Seulement ici, tout le travail est effectué automatiquement par nous-mêmes Script PHP.

Commençons par le premier point : ouvrir le fichier. Le fichier est ouvert avec Fonctions fopen(). Le premier paramètre est le chemin du fichier et le deuxième paramètre est modificateur. Regardons immédiatement les modificateurs possibles :

  1. un- ouvre le fichier en écriture uniquement, avec le pointeur placé à la fin du fichier.
  2. un+ un, mais le fichier s'ouvre également en lecture.
  3. r- ouvre le fichier en lecture seule et le pointeur est placé au début du fichier.
  4. r+- identique au modificateur r, mais le fichier est également ouvert en écriture.
  5. w- ouvre le fichier en écriture uniquement, place le pointeur sur le début du fichier et efface tout le contenu du fichier.
  6. w+- identique au modificateur w, seul le fichier est également ouvert en lecture.

Il existe également deux modes de travail avec les fichiers : binaire(noté b) Et texte(noté t). Si vous travaillez avec un fichier texte ordinaire, sélectionnez le mode texte et si, par exemple, avec une image, sélectionnez le mode binaire.

Ce sont tous les modificateurs de base qui vous suffiront. Apprenons maintenant comment fermer un fichier. Ferme le fichier avec Fonctions fclose().

Passons maintenant à la lecture du fichier en utilisant Fonctions fread(). Et laissez-moi enfin vous donner un exemple :

$contenu = "";
tandis que (!feof($handle))
$contents .= fread($handle, 4096);
fclose($poignée);
?>

Dans cet exemple, nous ouvrons d'abord le fichier pour le lire dans mode texte(modificateur rt). Fonction fopen() renvoie ce qu'on appelle descripteur, avec lequel vous pouvez communiquer avec le fichier et l'écrire dans une variable poignée. Alors nous sommes dans une boucle alors que() jusqu'à ce que la fin du fichier soit atteinte, on lit le contenu à chaque fois 4096 caractères que nous écrivons dans la variable Contenu. Une fois le processus de lecture terminé, fermez le fichier, à nouveau en utilisant le descripteur de fichier.

Passons maintenant à l'enregistrement en utilisant Fonctions fwrite():

$handle = fopen("files/a.txt", "at");
$string = "Ceci est du texte" ;
fwrite($handle, $string);
fclose($poignée);
?>

Après avoir exécuté ce script, dans le fichier a.txt la ligne " sera ajoutée C'est du texte".

Des lecteurs particulièrement attentifs ont prêté attention aux indications dont j'ai parlé juste au-dessus. Aiguille- c'est la position actuelle du "curseur" imaginaire dans le fichier. C'est ici que commence le travail avec le fichier. Vous pouvez modifier la position du pointeur en utilisant Fonctions fseek():

$handle = fopen("files/a.txt", "rt");
echo $contenu."
";
fseek($handle, 0, SEEK_SET);
$contents = fread($handle, 3);
echo $contenu."
";
?>

Nous lisons donc d'abord 3 caractère (en conséquence, la position actuelle du pointeur est décalée de 3 postes). Nous plaçons ensuite le pointeur au début du fichier. Et nous lisons encore 3 symbole. Comme vous l’avez peut-être deviné, nous avons compté deux fois la même chose. C'est la première fois 3 symbole, puis je suis revenu et j'ai compté à nouveau 3 symbole. Aussi si vous Fonctions fseek() remplacer SEEK_SET sur SEEK_CUR, alors le deuxième paramètre ne définira pas la position du pointeur, mais la décalera par rapport à localisation actuelle. Je vous conseille même de vous entraîner avec des pointeurs, car ce n'est pas si simple à comprendre. Je recommande également d'essayer d'écrire quelque chose dans le fichier à la position du pointeur, par exemple au tout début du fichier. Et assurez-vous d’expliquer vos résultats.

Et enfin, je voudrais donner quelques fonctions supplémentaires qui vous permettent de travailler avec des fichiers en temps réel. niveau simple: fichier_put_contens() Et fichier_get_contents(). Fonction fichier_put_contents()écrit dans un fichier, et la fonction fichier_get_contents() lit le contenu d'un fichier. Ces fonctions sont très simples à utiliser, mais il y a moins d'options (même si, en règle générale, elles ne sont pas nécessaires) :

file_put_contents("files/a.txt", "Ceci est le texte 2");
echo file_get_contents("files/a.txt");
?>

Dans ce script, nous avons d'abord écrit la ligne " C'est le texte 2" dans un fichier, puis nous lisons le contenu résultant et le produisons. Comme vous pouvez le voir, il est difficile de trouver un moyen plus simple lecture à partir d'un fichier Et écrire dans un fichier.

C'est tous les points principaux travailler avec des fichiers en PHP.

Avant de tenter de travailler avec un fichier, il est conseillé de s'assurer qu'il existe. Pour résoudre ce problème, deux fonctions sont généralement utilisées :

file_exists() et is_file().

La fonction file_exists() vérifie si un fichier donné existe. Si le fichier existe, la fonction renvoie VRAI, sinon elle renvoie FAUX. La syntaxe de la fonction file_exists() est :

bool file_exists (fichier de chaîne)

Un exemple de vérification de l'existence d'un fichier :

si (!file_exists($filename)) :

print "Le fichier $filename n'existe pas !";

est_fichier()

La fonction is_file() vérifie l'existence d'un fichier donné et s'il peut être lu/écrit. Essentiellement, is_file() est une version plus robuste de file_exists() qui vérifie non seulement si un fichier existe, mais aussi s'il peut lire et écrire des données :

bool is_file (fichier de chaîne)

L'exemple suivant montre comment vérifier qu'un fichier existe et que des opérations peuvent être effectuées dessus :

$file = "unfichier.txt" ;

if (is_file($fichier)) :

print "Le fichier $file est valide et existe !";

print "Le fichier $file n'existe pas ou ce n'est pas un fichier valide !";

Après s'être assuré que fichier requis existe et vous pouvez effectuer diverses opérations de lecture/écriture avec, vous pouvez passer à l'étape suivante : ouvrir le fichier.

La fonction filesize() renvoie la taille (en octets) du fichier avec prénom ou FALSE en cas d'erreur. Syntaxe de la fonction Filesize() :

int taille du fichier (chaîne nom de fichier)

Supposons que vous souhaitiez déterminer la taille du fichier pastry.txt. Pour obtenir les informations nécessaires, vous pouvez utiliser la fonction filesize() :

$fs = filesize("pâtisserie.txt"); print "Pastry.txt fait $fs octets.";

Le résultat suivant s'affiche :

Pastry.txt fait 179 octets.

Avant de pouvoir effectuer des opérations sur un fichier, vous devez l'ouvrir et l'associer à un gestionnaire de fichiers, et une fois que vous avez fini de travailler avec le fichier, vous devez le fermer. Ces sujets sont abordés dans la section suivante.

Ouverture et fermeture de fichiers

Avant de pouvoir effectuer des E/S sur un fichier, vous devez l'ouvrir à l'aide de fopen().

La fonction fopen() ouvre un fichier (s'il existe) et renvoie un entier -- appelé manipulateur de fichiers(descripteur de fichier). Syntaxe de la fonction fopen() :

int fopen (fichier de chaîne, mode chaîne [, int activate_path])

Le fichier en cours d'ouverture peut se trouver sur le système de fichiers local, exister en tant que flux d'entrée/sortie standard ou représenter un fichier sur un système distant accepté via HTTP ou FTP.

Le paramètre file peut être spécifié sous plusieurs formes, répertoriées ci-dessous :

Si le paramètre contient le nom d'un fichier local, fopen() ouvre ce fichier et renvoie un handle.

Si le paramètre est spécifié comme php://stdin, php://stdout ou php://stderr, le flux d'entrée/sortie standard correspondant est ouvert.

Si le paramètre commence par le préfixe http://, la fonction ouvre une connexion HTTP au serveur et renvoie un handle pour le fichier spécifié.

Si le paramètre commence par le préfixe ftp://, la fonction ouvre une connexion FTP au serveur et renvoie un handle pour le fichier spécifié. Il y a deux choses auxquelles il faut prêter une attention particulière dans ce cas : Si le serveur ne prend pas en charge le mode FTP passif, l'appel à fopen() échouera. De plus, les fichiers FTP sont ouverts en lecture ou en écriture.

Lorsqu'il fonctionne en mode passif, le serveur YAR attend les connexions des clients. Lorsqu'il fonctionne en mode actif, le serveur établit lui-même une connexion avec le client. La valeur par défaut est généralement le mode actif.

Le paramètre mode détermine la capacité de lire et d'écrire dans le fichier. Dans le tableau 7.1 répertorie certaines valeurs qui déterminent le mode d'ouverture du fichier.

Tableau 7.1. Modes d'ouverture de fichiers

Mode Description
Seulement la lecture. Le pointeur de position actuelle est placé au début du fichier
r+ Lire et écrire. Le pointeur de position actuelle est placé au début du fichier
w Enregistrement uniquement. Le pointeur de position actuelle est placé au début du fichier et tout le contenu du fichier est détruit. Si le fichier n'existe pas, la fonction tente de le créer
w+ Lire et écrire. Le pointeur de position actuelle est placé au début du fichier et tout le contenu du fichier est détruit. Si le fichier n'existe pas, la fonction tente de le créer
un Enregistrement uniquement. Le pointeur de position actuelle est placé à la fin du fichier. Si le fichier n'existe pas, la fonction tente de le créer
un+ Lire et écrire. Le pointeur de position actuelle est placé à la fin du fichier. Si le fichier n'existe pas, la fonction tente de le créer

Si le troisième paramètre facultatif include_path est 1, alors le chemin du fichier est relatif au répertoire d'inclusion spécifié dans le fichier php.ini (voir chapitre 1).

Vous trouverez ci-dessous un exemple d'ouverture d'un fichier à l'aide de la fonction fopen(). L'appel die(), utilisé en combinaison avec fopen(), fournit un message d'erreur si le fichier ne peut pas être ouvert :

$fichier = "userdata.txt" ; // Un fichier

$fh = fopen($file, "a+") ou die("Le fichier ($file) n'existe pas !");

L'extrait suivant ouvre une connexion au site PHP (http://www.php.net) :

$site = "http://www.php.net": // Serveur accessible via HTTP

$sh = fopen($site., "r"); //Associer le manipulateur à la page d'index Php.net

Une fois le travail terminé, le fichier doit toujours être fermé en utilisant fclose().

La fonction fclose() ferme un fichier avec le manipulateur donné. Si la fermeture réussit, TRUE est renvoyé ; si la fermeture échoue, FALSE est renvoyé. Syntaxe de la fonction fclose() :

int fclose (int manipulateur)

La fonction fclose() ferme avec succès uniquement les fichiers précédemment ouverts par les fonctions fopen() ou fsockopen(). Exemple de fermeture d'un fichier :

$fichier = "userdata.txt" ;

if (file_exists($file)) :

$fh = fopen($fichier, "r");

// Effectuer des opérations sur les fichiers

print "Le fichier Sfile n'existe pas !";

Écrire dans un fichier

Deux opérations principales sont effectuées sur les fichiers ouverts : la lecture et l'écriture.

La fonction is_writeable() vérifie qu'un fichier existe et est accessible en écriture. L'écriture est vérifiée à la fois pour le fichier et le répertoire. La syntaxe de la fonction is_writeable() est :

bool is_writeable (fichier de chaîne)

Une chose importante à noter est que PHP s'exécutera très probablement sous l'ID utilisateur utilisé par le serveur Web (généralement « personne »). Un exemple d'utilisation de is_writeable() est donné dans la description de la fonction fwrite().

La fonction fwrite() écrit le contenu d'une variable chaîne dans le fichier spécifié par le gestionnaire de fichiers. Syntaxe de la fonction fwrite() :

int fwrite (int manipulateur, variable de chaîne [, int length])

Si le paramètre facultatif de longueur est passé lors de l'appel de la fonction, l'écriture s'arrête soit après avoir écrit le nombre de caractères spécifié, soit lorsque la fin de la ligne est atteinte. Vérifier si un fichier peut être écrit est illustré dans l'exemple suivant :

// Informations sur le trafic sur le site utilisateur

$données = "08:13:00|12:37:12|208.247.106.187|Win98" ;

$filename = "unfichier.txt" ;

// Si le fichier existe et peut être écrit

if (is_writeable($filename)) :

$fh = fopen($nomfichier, "a+");

// Écrit le contenu de $data dans un fichier

$ succès - fwrite($fh, $data);

// Fermer le fichier

fclose($fh); autre:

print "Impossible d'ouvrir Sfilename en écriture";

La fonction fputs() est un alias de fwrite() et peut être utilisée partout où fwrite() est utilisée.

La fonction fputs() est un alias de fwrite() et a exactement la même syntaxe. Syntaxe de la fonction fputs() :

int fputs (int manipulateur, variable de chaîne [, int length])

Personnellement, je préfère utiliser fputs(). Il ne faut pas oublier qu’il s’agit simplement d’une question de style et n’a rien à voir avec des différences entre les deux fonctions.

Lecture à partir d'un fichier

Sans aucun doute, la lecture est l’opération la plus importante effectuée sur les fichiers. Vous trouverez ci-dessous quelques fonctionnalités qui rendent la lecture d'un fichier plus efficace. La syntaxe de ces fonctions copie presque exactement la syntaxe de fonctions d'enregistrement similaires.

La fonction i s_readable() permet de vérifier que le fichier existe et est lisible. La lisibilité est vérifiée à la fois pour le fichier et le répertoire. La syntaxe de la fonction is_readable() est :

huer! is_readable (fichier de chaîne]

Très probablement, PHP s'exécutera sous l'ID utilisateur utilisé par le serveur Web (généralement "personne"), donc pour que la fonction is_readable() renvoie TRUE, le fichier doit pouvoir être lu par tout le monde. L'exemple suivant montre comment vérifier qu'un fichier existe et est lisible :

if (is_readable($filename)) :

// Ouvre le fichier et place le pointeur de position actuelle à la fin du fichier

$fh = fopen($nomfichier, "r");

print "$filename n'est pas lisible !";

La fonction fread() lit le nombre d'octets spécifié à partir d'un fichier spécifié par le manipulateur de fichiers. Syntaxe de la fonction fwrite() :

int fread (int manipulateur, int longueur)

Le manipulateur doit faire référence à un fichier ouvert et lisible (voir la description de la fonction is_readable()). La lecture s'arrête après la lecture d'un nombre spécifié d'octets ou lorsque la fin du fichier est atteinte. Considérez le fichier texte pastry.txt présenté dans le listing 7.1. La lecture et la sortie de ce fichier dans le navigateur s'effectuent par le fragment suivant :

$fh = fopen("pastry.txt", "r") ou die("Impossible d'ouvrir le fichier !");

$file = fread($fh, taille du fichier($fh));

En utilisant la fonction fllesize() pour déterminer la taille de pastry.txt en octets, vous vous assurez que la fonction fread() lit l'intégralité du contenu du fichier.

Inscription 7.1. Fichier texte pâtisserie.txt

Recette : Pâte à pâtisserie

1 1/4 tasse de farine tout usage

3/4 bâton (6 cuillères à soupe) de beurre non salé, haché

2 cuillères à soupe de shortening végétal 1/4 cuillère à café de sel

3 cuillères à soupe d'eau

La fonction fgetc() renvoie une chaîne contenant un caractère du fichier à la position actuelle du pointeur, ou FALSE lorsque la fin du fichier est atteinte. Syntaxe de la fonction fgetc() :

chaîne fgetc (manipulateur int)

Le manipulateur doit référencer un fichier ouvert et lisible (voir la description de la fonction is_readable() plus haut dans ce chapitre). L'exemple suivant illustre la lecture et la sortie caractère par caractère d'un fichier à l'aide de la fonction fgetc() :

$fh = fopen("pâtisserie.txt", "r"); tandis que (!feof($fh)) :

$char = fgetc($fh) :

imprimer $char; finir pendant ce temps;

La fonction fgets() renvoie une chaîne lue à partir de la position actuelle du pointeur dans le fichier spécifié par le gestionnaire de fichiers. Le pointeur de fichier doit pointer vers un fichier ouvert et lisible (voir la description de la fonction is_readable() plus haut dans ce chapitre). Syntaxe de la fonction fgets() :

string fgets (manipulateur int, longueur int)

La lecture s'arrête lorsque l'une des conditions suivantes est remplie :

  • lecture à partir de la longueur du fichier -- 1 octet ;
  • un caractère a été lu dans un fichier nouvelle ligne(inclus dans la chaîne renvoyée) ;
  • L'indicateur de fin de fichier (EOF) a été lu dans le fichier.

Si vous souhaitez organiser la lecture ligne par ligne d'un fichier, passez en deuxième paramètre une valeur évidemment supérieure au nombre d'octets de la ligne. Exemple de lecture et de sortie ligne par ligne d'un fichier :

$fh = fopen("pâtisserie.txt", "r");

tandis que (!feof($fh));

$line = fgets($fh, 4096);

imprimer $line. "
";

La fonction fgetss() est complètement similaire à fgets() à une exception près : elle tente de supprimer toutes les balises HTML et PHP du texte lu :

string fgetss (manipulateur Int, longueur int [, string Allowed_tags])

Avant de passer aux exemples, examinez le contenu du listing 7.2 : ce fichier est utilisé dans les listings 7.3 et 7.4.

Inscription 7.2. Science des fichiers.html

Dernières nouvelles – Science

Une forme de vie extraterrestre découverte


20 août 2000

Tôt ce matin, une nouvelle forme étrange de champignon a été découverte dans le placard de l'ancien réfrigérateur de l'appartement de W. J. Gilmore. On ne sait pas si le puissant rayonnement émanant de l'écran d'ordinateur du locataire a contribué à cette évolution.

Inscription 7.3. Supprimer les balises d'un fichier HTML avant de l'afficher dans le navigateur

$fh = fopen("science.html", "r");

tandis que (!feof($fh)) :

print fgetss($fh, 2048);

Le résultat est présenté ci-dessous. Comme vous pouvez le constater, toutes les balises HTML ont été supprimées du fichier science.html, entraînant la perte du formatage :

Dans certaines situations, toutes les balises sauf quelques-unes sont supprimées d'un fichier - par exemple, les balises de saut de ligne
. Le listing 7.4 montre comment procéder.

Inscription 7.4. Suppression sélective des balises d'un fichier HTML

$fh = fopenC"science.html", "r");

$autorisé = "
";

tandis que (!feof($fh)) :

print fgetss($fh. 2048, $allowable);

Résultat:

Dernières nouvelles - Science Une forme de vie extraterrestre découverte le 20 août 2000 Tôt ce matin, une nouvelle forme étrange de champignon a été trouvée poussant dans le placard de l'ancien réfrigérateur de l'appartement de W. J. Gilmore. On ne sait pas si le puissant rayonnement émanant de l'écran d'ordinateur du locataire a contribué à cela. évolution.

Comme vous pouvez le constater, la fonction fgetss() facilite la conversion de fichiers, surtout si vous disposez d'un grand nombre de fichiers. Fichiers HTML, formaté de la même manière.

Lire un fichier dans un tableau

La fonction file() charge l'intégralité du contenu d'un fichier dans un tableau indexable. Chaque élément du tableau correspond à une ligne du fichier. Syntaxe de la fonction File() :

fichier tableau (fichier de chaîne [, int include_path])

Si le troisième paramètre facultatif include_path est 1, alors le chemin du fichier est relatif au répertoire d'inclusion spécifié dans le fichier php.ini (voir chapitre 1). Le listing 7.5 utilise la fonction file() pour charger le fichier pastry.txt (voir le listing 7.1).

$file_array = fichier("pâtisserie.txt");

while (list($line_num. $line) = eacht($file_array)) :

imprimer " Ligne $line_num :", htmlspecialchars ($ ligne), "
\n"

Chaque ligne du tableau est imprimée avec un numéro :

Ligne 0 : Recette : Pâte pâtissière

Ligne 1 : 1 1/4 tasse de farine tout usage

Ligne 2 : 3/4 bâtonnet (6 cuillères à soupe) de beurre non salé, haché

Ligne 3 : 2 cuillères à soupe de shortening végétal

Ligne 4 : 1/4 cuillère à café de sel

Ligne 5 : 3 cuillères à soupe d'eau

Redirection d'un fichier vers la sortie standard

La fonction readfile() lit le contenu d'un fichier et l'écrit sur la sortie standard (dans la plupart des cas, dans le navigateur). Syntaxe de la fonction readfile() :

int readfile (fichier de chaîne [, int include_path])

La fonction renvoie le nombre d'octets lus. Le fichier peut résider sur le système de fichiers local, exister en tant qu'entrée/sortie standard ou représenter le fichier sur un système distant accepté via HTTP ou FTP. Le paramètre file est défini selon les mêmes règles que dans la fonction fopen().

Disons que vous disposez d'un fichier latorre.txt dont vous souhaitez afficher le contenu dans le navigateur :

Restaurant "La Tour". situé à Nettuno, en Italie, offre un mélange éclectique de styles. histoire et cuisine raffinée de fruits de mer. Dans l'enceinte du bourg médiéval qui entoure la ville, on peut dîner tout en regardant les passants faire leurs courses dans les boutiques du village. Le confort associé aux plats de mer les plus frais font de La Torre l'un des meilleurs restaurants d'Italie.

Lorsque l'extrait suivant est exécuté, l'intégralité du contenu de latorre.txt est envoyé vers la sortie standard :

$restaurant_file = "latorre.txt";

// Envoie le fichier entier vers la sortie standard

readfile($restaurant_file);

Ouverture d'un gestionnaire de fichiers de processus

En plus des fichiers normaux, vous pouvez ouvrir des manipulateurs de fichiers pour interagir avec les processus sur le serveur. Le problème est résolu par la fonction popen(), qui a la syntaxe suivante :

int popen (commande chaîne, mode chaîne)

Le paramètre command spécifie la commande système à exécuter et le paramètre mode décrit le mode d'accès :

// Ouvrir le fichier "spices.txt" en écriture

$fh = fopen("épices.txt","w");

// Ajout de quelques lignes de texte

fputs($fh, "Persil, sauge, romarin\n");

fputs($fh, "Paprika, sel, poivre\n");

fputs($fh, "Basilic, sauge, gingembre\n");

// Ferme le manipulateur

// Ouvrez un processus grep UNIX pour rechercher le mot Basil dans le fichier spices.txt

$fh - popen("grep Basilic< spices.txt", "r");

// Affiche le résultat de grep

Le résultat ressemble à ceci :

Basilic, sauge, gingembre

La fonction fpassthru() est similaire à la fonction passthru() décrite dans la section « Exécution de programmes externes » de ce chapitre.

Après avoir terminé toutes les opérations, le fichier ou le processus doit être fermé. La fonction pclose() ferme la connexion au processus spécifié par le manipulateur, de la même manière que la fonction fclose() ferme un fichier ouvert par la fonction fopen(). Syntaxe de la fonction pclose() :

int pclose (int manipulateur)

Dans le paramètre manipulateur le manipulateur reçu plus tôt avec un appel réussi à popen() est transmis.

Ouverture d'une connexion socket

PHP ne se limite pas à interagir avec les fichiers et les processus : vous pouvez également établir des connexions via des sockets. Prise Un socket est une abstraction logicielle qui vous permet de communiquer avec divers services sur un autre ordinateur.

La fonction fsockopen() établit une connexion socket à un serveur sur Internet

via le protocole TCP ou UDP. Syntaxe de la fonction fsockopen() :

int fsockopen (nœud de chaîne, port int [, code_erreur int [, texte_erreur de chaîne [, délai d'attente int]]])

Les paramètres facultatifs error_code et error_text contiennent des informations qui seront affichées en cas d'échec de la connexion au serveur. Les deux paramètres doivent être passés par référence. Le troisième paramètre facultatif, timeout, spécifie la durée d'attente d'une réponse du serveur (en secondes). Le listing 7.6 montre l'utilisation de la fonction fsockopen() pour obtenir des informations sur le serveur. Cependant, avant de regarder le listing 7.6, il y a une fonction supplémentaire avec laquelle vous devez vous familiariser : socket_set_blocking().

UDP (User Datagram Protocol) est un protocole de communication sans connexion.

socket_set_blocking()

La fonction socket_set_b1ocki ng() vous permet de définir le contrôle du délai d'attente pour les opérations du serveur :

socket_set_blocking (manipulateur int, mode booléen)

Le paramètre manipulateur spécifie le socket précédemment ouvert et le paramètre mode sélectionne le mode vers lequel le socket est basculé (TRUE pour le mode bloquant, FALSE pour le mode non bloquant). Un exemple d'utilisation des fonctions fsockopen() et socket_set_blocking() est présenté dans le listing 7.6.

Inscription 7.6. Utiliser fsockopen() pour obtenir des informations sur le serveur

fonction getthehost($host.$path) (

// Ouvrir la connexion au nœud

$fp - fsockopen($host, 80, &$errno, &$errstr, 30);

// Passe en mode blocage

socket_set_blocking($fp, 1),

// Envoie les en-têtes

fputs($fp,"GET $path HTTP/1.1\r\n");

fputs($fp, "Hôte : $hôte\r\n\r\n"); $x = 1 ;

// Récupère les en-têtes

pendant que($x< 10) :

$headers = fgets($fp, 4096);

// Ferme le manipulateur

getthehost("www.apress.com", "/");

L’exécution du listing 7.6 produit le résultat suivant :

HTTP/1.1 200 OK Serveur : Microsoft-IIS/4.0 Emplacement du contenu :

2000 20:25:06 GMT ETag : "f0a61666dbff1bf1:34a5" Longueur du contenu : 1311

La fonction pfsockopen() est une version persistante de fsockopen(). Cela signifie que la connexion ne sera pas automatiquement fermée à la fin du script dans lequel la fonction a été appelée. La syntaxe de la fonction pfsockopen() est :

int pfsockopen (nœud de chaîne, port int [, code_erreur int [, texte_erreur de chaîne [, délai d'attente int]]])

En fonction des objectifs spécifiques de votre application, vous trouverez peut-être plus pratique d'utiliser pfsockopen() au lieu de fsockopen().

Lancement de programmes externes

Les scripts PHP peuvent également exécuter des programmes situés sur le serveur. Cette fonctionnalité est particulièrement souvent utilisée lors de l'administration du système via un navigateur Web, ainsi que pour obtenir plus facilement des informations récapitulatives sur le système.

La fonction exec() s'exécute programme donné et renvoie la dernière ligne de sa sortie. Syntaxe de la fonction exec() :

string exec (commande de chaîne [, tableau de chaînes [, retour int]])

Veuillez noter que la fonction exec() exécute uniquement la commande et n'imprime pas ses résultats. Toutes les sorties de commande peuvent être stockées dans un paramètre de tableau facultatif. De plus, si une variable de retour est également spécifiée lorsque le paramètre array est spécifié, ce dernier se voit attribuer le code retour de la commande exécutée.

Le listing 7.7 montre comment utiliser la fonction exec() pour exécuter la fonction système ping UNIX.

Inscription 7.7. Vérification de la connexion avec le serveur à l'aide de la fonction exec()

exec("ping -from 5 www.php.net", $ping);

// Sous Windows - exec("ping -n 5 www.php.net. $ping);

pour ($i=0; $i< count($ping);$i++) :

imprimer "
$ping[$i]";

Résultat:

PING www.php.net (208.247.106.187) : 56 octets de données

64 octets de 208.247.106.187 : icmp_seq=0 ttl=243 time=66,602 ms

64 octets de 208.247.106.187 : icmp_seq=1 ttl=243 time=55,723 ms

64 octets de 208.247.106.187 : icmp_seq=2 ttl=243 time=70,779 ms

64 octets de 208.247.106.187 : icmp_seq=3 ttl=243 temps=55,339 ms

64 octets de 208.247.106.187 : icmp_seq=4 ttl=243 time=69,865 ms

Statistiques ping de www.php.net --

5 paquets transmis. 5 paquets reçus. 0 % de perte de paquets

aller-retour min/moy/max/stddev - 55,339/63,662/70,779/6,783 ms

Apostrophes arrière

Il existe une autre façon de procéder commandes système, qui ne nécessite pas d'appel de fonction - la commande exécutée est entourée de guillemets (` `) et les résultats de son opération sont affichés dans le navigateur. Exemple:

imprimer "

$sortie
";

Cet extrait affiche le contenu du répertoire où se trouve le script dans le navigateur.

Le paramètre interne ping -c 5 (-p 5 sous Windows) spécifie le nombre d'interrogations du serveur.

Si vous souhaitez simplement renvoyer les résultats non formatés d'une commande, utilisez la fonction passthru() décrite ci-dessous.

La fonction passthru() fonctionne à peu près de la même manière que exec(), à une exception près : elle imprime automatiquement les résultats de la commande. Syntaxe de la fonction Passthru() :

void passthru (commande de chaîne [, int return])

Si un paramètre de retour facultatif est passé lors de l'appel de passthru(), cette variable est définie sur le code de retour de la commande exécutée.

escapeshellcmd()

La fonction escapeshellcmd() échappe à tous les caractères potentiellement dangereux qui pourraient être saisis par l'utilisateur (par exemple, Formulaire HTML), pour exécuter les commandes exec(), passthru(), system() ou popen(). Syntaxe:

chaîne escapeshellcmd (commande chaîne)

Les entrées utilisateur doivent toujours être traitées avec une certaine prudence, mais malgré cela, les utilisateurs peuvent saisir des commandes qui seront exécutées par les fonctions de commande du système. Considérez l'extrait suivant :

$user_input = `rm -rf *` ; // Supprime le répertoire parent et tous ses sous-répertoires

exec($user_input); // Exécute $user_input !!!

Si aucune précaution n’est prise, un tel ordre mènera au désastre. Cependant, vous pouvez utiliser les fonctions escapeshellcmd() pour échapper aux entrées de l'utilisateur :

$user_input = `rm - rf *` ; // Supprime le répertoire parent et tous ses sous-répertoires

ex(escapeshellcmd($user_input)); // Échapper aux personnages dangereux

La fonction escapeshellcmd() échappe au caractère *, empêchant la commande d'avoir des conséquences catastrophiques.

La sécurité est l'un des aspects les plus importants de la programmation Web. J'ai donc consacré un chapitre entier à ce sujet et à son lien avec Programmation PHP. Voir le chapitre 16 pour plus d'informations.

Travailler avec le système de fichiers

PHP dispose de fonctions permettant de visualiser et d'effectuer diverses opérations sur les fichiers du serveur. Les informations sur les attributs des fichiers du serveur (emplacement, propriétaire et privilèges) sont souvent utiles.

La fonction basename() extrait le nom du fichier du nom complet transmis. Syntaxe de la fonction Basename() :

chaîne nom de base (chaîne nom_complet)

L'extraction du nom du fichier de base à partir du nom complet se fait comme suit :

$path = "/usr/local/phppower/htdocs/index.php"; $fichier = nom de base($chemin); // $fichier = "index.php"

En effet, cette fonction supprime le chemin du nom complet et ne laisse que le nom du fichier.

La fonction getlastmod() renvoie la date et l'heure de la dernière modification de la page à partir de laquelle la fonction est appelée. Syntaxe de la fonction getlastmod() :

int getlastmod (vide)

La valeur de retour suit le format date/heure UNIX et vous pouvez utiliser la fonction date() pour la formater. L'extrait suivant affiche la date à laquelle la page a été modifiée pour la dernière fois :

echo "Dernière modification : ".date("H:i:s a". getlastmod());

La fonction stat() renvoie un tableau indexable avec des informations détaillées sur le fichier portant le nom donné :

tableau stat (chaîne nom de fichier)

Les informations suivantes sont renvoyées dans les éléments du tableau :

0 appareil

2 Mode de protection du nœud d'indexation

3 Nombre de liens

4 ID utilisateur propriétaire

5 ID du groupe propriétaire

6 Type de périphérique du nœud d'indexation

7 Taille en octets

8 Heure du dernier appel

9 Heure de la dernière modification

10 Heure de la dernière modification

11 Taille de bloc pour les E/S du système de fichiers

12 Nombre de blocs alloués

Ainsi, si vous souhaitez connaître la dernière fois qu’un fichier a été accédé, regardez l’élément 8 du tableau renvoyé. Regardons un exemple :

$fichier - "fichier de données.txt" ;

liste($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime,

$bsize) = stat($fichier);

print "$file vaut $size octets.
";

print "Heure du dernier accès : $atime
";

print "Heure de la dernière modification : $mtime
";

Résultat:

popen.php fait 289 octets.

Heure du dernier accès : 15 août 2000 12:00:00

Heure de dernière modification : 15 août 2000 10:07:18

Dans cet exemple, j'ai utilisé la construction list() pour attribuer des noms à chaque valeur de retour. Bien entendu, vous pouvez tout aussi facilement renvoyer un tableau, parcourir les éléments et afficher toutes les informations nécessaires. Comme vous pouvez le constater, la fonction stat() permet d'obtenir diverses informations utiles sur un fichier.

Afficher et modifier les caractéristiques d'un fichier

Chaque fichier sur les systèmes Famille UNIX il y a trois caractéristiques importantes :

  • appartenir à un groupe;
  • propriétaire;
  • autorisations.

Toutes ces caractéristiques peuvent être modifiées à l'aide du Fonctions PHP. Les fonctionnalités décrites dans cette section ne fonctionnent pas sur les systèmes de la famille Windows.

Si vous n'avez aucune expérience avec les systèmes d'exploitation UNIX, des informations sur les caractéristiques du système de fichiers UNIX sont disponibles sur http://sunsite.auc.dk/linux-newbie/FAQ2.htm. Les sujets relatifs à l'appartenance à un groupe, à la propriété et aux autorisations sont abordés dans la section 3.2.6.

La fonction chgrp() tente de changer le groupe auquel appartient un fichier donné. Syntaxe de la fonction chgrp() :

int chgrp (nom de fichier chaîne, groupe mixte)

La fonction filegroup() renvoie l'ID de groupe du propriétaire du fichier portant le nom donné, ou FALSE en cas d'erreur. Syntaxe de la fonction Filegroup() :

int filegroup (chaîne nom de fichier)

La fonction chmod() modifie les autorisations d'un fichier portant le nom donné. Syntaxe de la fonction chmod() :

int chmod (nom de fichier de chaîne, autorisations int)

Les autorisations sont spécifiées en notation octale. Les spécificités de la définition d'un paramètre dans la fonction chmod() sont démontrées dans l'exemple suivant :

chmod("data_file.txt", g+r); // Ne fonctionne pas

chmod("fichier_données.txt", 766); // Ne marche pas

chmod("fichier_données.txt", 0766); // Travaux

La fonction fileperms() renvoie les permissions du fichier portant le nom donné, ou FALSE en cas d'erreur. Syntaxe de la fonction Fileperms() :

int fileperms (nom de fichier chaîne)

La fonction chown() tente de changer le propriétaire d'un fichier. Le droit de changer le propriétaire d'un fichier est limité à l'utilisateur privilégié. Syntaxe de la fonction chown() :

int chown (nom de fichier chaîne, utilisateur mixte)

La fonction fileowner() renvoie l'ID utilisateur du propriétaire du fichier portant le nom donné. Syntaxe de la fonction Fileowner() :

int fileowner (chaîne nom de fichier)

Copier et renommer des fichiers

D'autres fonctions système utiles pouvant être exécutées dans les scripts PHP incluent la copie et le renommage de fichiers sur le serveur. Ces opérations sont effectuées par deux fonctions : copy() et rename().

Copier un fichier dans un script PHP n'est pas plus difficile que d'utiliser la commande UNIX cf. Le problème est résolu par la fonction PHP copy(). La syntaxe de la fonction soru() est :

copie int (source de chaîne, destination de chaîne)

La fonction copy() tente de copier le fichier source vers le fichier de destination ; renvoie VRAI en cas de succès, FAUX en cas d'échec. Si le fichier de destination n'existe pas, la fonction copy() le crée. L'exemple suivant montre comment créer une copie de sauvegarde d'un fichier à l'aide de la fonction copy() :

$data_file = "data.txt" ;

copy($data_file. $data_file".bak") ou die("Impossible de copier $data_file");

La fonction rename() renomme un fichier. En cas de succès, TRUE est renvoyé et en cas d'échec, FALSE est renvoyé. Syntaxe de la fonction Rename() :

bool rename (chaîne ancien_nom, chaîne nouveau_nom)

Un exemple de renommage d'un fichier à l'aide de la fonction rename() :

$data_file = "data.txt" ;

rename($fichier de données, $fichierdedonnées".old") ou die("Impossible de renommer le fichier de données $");

Suppression de fichiers

La fonction unlink() supprime un fichier portant le nom donné. Syntaxe:

int dissocier (fichier de chaîne)

Si vous travaillez avec PHP sur un système Windows, vous pouvez parfois rencontrer des problèmes lors de l'utilisation de cette fonctionnalité. Dans ce cas, vous pouvez utiliser la fonction system() décrite ci-dessus et supprimer le fichier avec la commande DOS del :

system("del filename.txt");

Travailler avec des catalogues

Les fonctions PHP vous permettent de visualiser et de parcourir le contenu des répertoires. Le listing 7.8 montre une structure de répertoires typique sur un système UNIX.

Inscription 7.8. Structure de répertoire typique

La fonction dirname() complète basename() - elle extrait le chemin du nom de fichier complet. La syntaxe de la fonction dirname() est :

nom de répertoire de chaîne (chemin de chaîne)

Un exemple d'utilisation de dirname() pour extraire un chemin d'accès à partir d'un nom complet :

$path = "/usr/locla/phppower/htdocs/index.php";

$file = dirname($path); // $fichier = "usr/local/phppower/htdocs"

La fonction dirname() est parfois utilisée en conjonction avec la variable $SCRIPT_FILENAME pour obtenir le chemin complet du script à partir duquel la commande est exécutée :

$dir - dirname($SCRIPT_FILENAME);

La fonction is_dir() vérifie si un fichier portant un nom donné est un répertoire :

bool is_dir (nom de fichier de chaîne)

L'exemple suivant utilise la structure de répertoires du listing 7.8 :

$ isdir = is_dir("index.html"); // Renvoie FAUX

$isdir = is_dir("livre"); // Renvoie VRAI

La fonction mkdir() fait la même chose que la commande UNIX du même nom : elle crée un nouveau répertoire. Syntaxe de la fonction mkdir() :

int mkdir (chemin de chaîne, mode int)

Le paramètre path spécifie le chemin pour créer le nouveau répertoire. N'oubliez pas de terminer le paramètre par le nom du nouveau répertoire ! Le paramètre mode détermine les autorisations attribuées au répertoire créé.

Tout comme la fonction fopen() ouvre un manipulateur pour travailler avec un fichier donné, la fonction opendir() ouvre un manipulateur pour travailler avec un répertoire. La syntaxe de la fonction opendir() est :

int opendir (chemin de chaîne)

La fonction closeir() ferme le handle de répertoire passé en paramètre. La syntaxe de la fonction closeir() est :

void closeir (int directory_manipulator)

La fonction readdir() renvoie l'élément suivant du répertoire spécifié. Syntaxe:

chaîne readdir (int directory_manipulator)

Grâce à cette fonction, vous pouvez facilement lister tous les fichiers et sous-répertoires situés dans le répertoire courant :

$dh = opendir(" .);

while ($file = readdir($dh)) :

imprimer "$fichier
" ; pendant ce temps ;

La fonction chdir() fonctionne exactement comme la commande UNIX cd ; elle passe au répertoire spécifié par le paramètre. Syntaxe de la fonction chdir() :

int chdir (répertoire de chaînes)

Dans l'exemple suivant, nous accédons au sous-répertoire book/ et imprimons son contenu :

$newdir = "livre" ;

chdir($newdir) ou die("Impossible de passer au répertoire ($newdir)"); $dh = opendir(" . ");

while ($file = readdir($dh)) ;

imprimer "$fichier
";

La fonction rewlnddir() déplace le pointeur de position actuelle au début du répertoire, fonction ouverte opendir(). La syntaxe de la fonction rewinddir() est :

void rewinddir (int directory_manipulator)

Projet 1 : Compteur d'accès simple

Le script présenté dans cette section compte le nombre de visites sur la page sur laquelle il se trouve. Avant de passer à code de programme Dans le listing 7.9, regardez l'algorithme écrit en pseudocode :

  1. Attribuez à la variable $access le nom du fichier dans lequel la valeur du compteur sera stockée.
  2. Utilisez la fonction file() pour lire le contenu de $access dans le tableau $visits. Le préfixe @ avant le nom de la fonction supprime les erreurs possibles (par exemple, il n'existe aucun fichier portant le nom donné).
  3. Définissez la variable $current_visitors sur la valeur du premier (et unique) élément du tableau $visits.
  4. Augmentez la valeur $current_visitors de 1.
  5. Ouvrez le fichier $access en écriture et placez le pointeur de position actuelle au début du fichier.
  6. Écrivez la valeur $current_visitors dans le fichier $access.
  7. Fermez le manipulateur qui fait référence au fichier $access.

Inscription 7.9. Compteur d'accès simple

// Script : compteur d'accès simple

// Objectif : sauvegarder le nombre de hits dans un fichier

$access = "hits.txt" ; // Le nom du fichier est choisi arbitrairement

$current_visitors = $visites ; // Récupère le premier (et unique) élément

+$current_visiteurs ; // Augmente le compteur d'accès

$fh = fopen($access. "w"); // Ouvrez le fichier hits.txt et installez

// pointeur vers la position actuelle au début du fichier

@fwrite($fh, $current_visitors);// Écrire une nouvelle valeur de compteur

// vers le fichier "hits.txt"

fclose($fh); // Ferme le manipulateur de fichiers "hits.txt"

Projet 2 : construire un plan du site

Le script du listing 7.10 construit un plan du site, une vue hiérarchique de tous les dossiers et fichiers du serveur, en commençant à un répertoire donné. Le calcul du remplissage des éléments qui composent un plan de site utilise les fonctions définies dans ce chapitre et les précédents. Avant de passer au programme, revoyez l'algorithme écrit en pseudocode :

  1. Déclarez les variables de service pour stocker le répertoire parent, le nom du fichier graphique avec l'image du dossier, le nom de la page et l'indicateur du système d'exploitation du serveur (Windows ou autre système).
  2. Déclarez une fonction display_directory() qui lit le contenu d'un répertoire et le formate pour l'afficher dans le navigateur.
  3. Construisez le chemin du répertoire en combinant le nom passé dans la variable $dir1 avec $dir.
  4. Ouvrez un répertoire et lisez son contenu. Formatez les noms de répertoires et de fichiers et affichez-les dans le navigateur.
  5. Si le fichier courant est un répertoire, appelez display_di rectory() de manière récursive et transmettez-lui le nom du nouveau répertoire à afficher. Calculez l'indentation utilisée lors du formatage de la sortie.

Si le fichier n'est pas un répertoire, il est formaté pour s'afficher sous forme de lien hypertexte (et l'indentation utilisée lors du formatage est également calculée).

Inscription 7.10. Programme Sitemap.php

// Fichier : plan du site.php

// Objectif : construire un plan du site

// Répertoire à partir duquel commence la construction de la carte

$beg_path = "C:\Program FilesVApache Group\Apache\htdocs\phprecipes";

// Fichier avec une image graphique du dossier.

// Le chemin doit être Relatif* au répertoire racine du serveur Apache

$folder_location = "C:\Mes documents\PHP pour programmeurs\FINAL CHPS\graphics\folder.gif" ;

// Texte dans le titre de la fenêtre $page_name = "PHPRecipes SiteMap";

// Sur quel système le script sera-t-il utilisé - Linux ou Windows ?

// (0 - Windows ; 1 - Linux)

$usingjinux = 0;

// Fonction : display_directory

// Objectif : lire le contenu du répertoire spécifié par le paramètre

// $dir1, suivi du formatage de la hiérarchie des répertoires et des fichiers.

// La fonction peut être appelée de manière récursive.

fonction display_directory ($dir1, $folder_location, $using_linux, $init_degree) (

// Mettre à jour le chemin

Sdh = opendir($dir);

while($file = readdir($dh)) :

// Éléments du répertoire "." et ".." ne sont pas affichés.

if (($file != ".") && ($file != "..")) :

si ($using_linux == 0) :

$profondeur = exploser("\\", $dir) : sinon :

$profondeur = exploser("/", $dir); fin si ; $actuelle_profondeur = taillede($profondeur);

// Construisez le chemin selon les règles du système d'exploitation utilisé. si ($using_linux == 0) :

$tab_profondeur = $current_deptn - $init_profondeur ;

$fichier = $rép. "\\", $fichier ; autre:

$fichier = $rép. "/",$fichier; fin si;

// Est-ce que $file contient un répertoire ? if (est dir($file)) :

// Calculer l'indentation

tandis que ($x< ($tab_depth * 2)) :

$x++ ; finir pendant ce temps;

imprimer "

".nom de base ($ fichier)."
";

// Incrément du compteur

// Appel récursif à display_directory()

display_directory($file, $folder_location, $using_linux, $init_degree);

// Pas un répertoire

// Construire un chemin selon les règles du utilisé

// système opérateur.

si ($using_linux == 0) :

$tab_profondeur = ($courant_profondeur - $init_profondeur) - 2 ; $x = 0 ;

// Calculer l'indentation

tandis que ($x< (($tab_depth * 2) + 5)) :

imprimer " ".nom de base ($ fichier)."
";

imprimer " ".nom de base ($ fichier)."
";

fin si; // Is_dir(file) endif : // Si ! "." ou ".."

// Ferme le répertoire ferméir($dh);

<? print "$page_name"; ?>

// Calcule le remplissage initial

si ($using_linux == 0) :

$profondeur = exploser("\\", $beg_path);

$profondeur = exploser("/", $beg_path);

$init_profondeur = taillede($profondeur);

display_directory ($beg_path, $folder_location, $using_linux, $init_degree);

En figue. La figure 7.1 montre le résultat de l'exécution du script pour un répertoire contenant plusieurs chapitres de ce livre.

Riz. 7.1. Affichage de la structure des répertoires sur le serveur à l'aide du script sitemap.php

Résultats

Ce chapitre a présenté de nombreux outils PHP pour travailler avec des fichiers. Nous avons notamment considéré les problématiques suivantes :

  • vérifier l'existence des fichiers ;
  • ouvrir et fermer des fichiers et des flux d'E/S ;
  • écrire et lire un fichier ;
  • rediriger le fichier vers le flux de sortie ;
  • lancer des programmes externes;
  • opérations du système de fichiers.

Les éléments de ce chapitre préparent le terrain pour le chapitre suivant, « Chaînes et expressions régulières », car lors du développement d'applications Web, le traitement des chaînes et les opérations d'E/S sont très étroitement liées.