Classe de lecture de fichier ...

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 129 fois - Téléchargée 31 fois

Contenu du snippet

Salut à tous,
Cette classe permet de lire les fichiers un peu de la même manière qu'avec les fonctions natives en PHP. Sauf que là, c'est une classe ...

Source / Exemple :


<?php
/* ------------------------- */
// Classe "File" ...
   class File
   {
      var $Path;
      var $Data;
      var $Handle;
      var $Cursor;
   // Constructeur ...
      function File($path)
      {
         $this -> Path = $path;
         $this -> Cursor = 0;
      }
   // Ouvre le fichier ...
      function Open()
      {
         $this -> Handle = fopen($this -> Path, 'r');
      }
   // Lit le caractère par rapport à la position du curseur.
      function Read($length = 1)
      {
         if(!$this -> WasOffsetRead($this -> GetCursorPosition()))
         {
            $byte_chains = fread($this -> Handle, $length);
            $this -> Data .= $byte_chains;
         }
         else
         {
            $byte_chains = substr($this -> Data, $this -> GetCursorPosition(), $length); 
         }
         $this -> Cursor += $length;
         return $byte_chains;
      }
   // Positionne le curseur ...
      function Seek($offset, $whence = 'POSITION')
      {
         switch($whence)
         {
            case 'POSITION' : 
               if(!$this -> WasOffsetRead($offset))
               {
                  $this -> Read($offset - strlen($this -> Data));
               }
               $this -> Cursor = $offset;
               break;
            case 'MOVE' : 
               if($offset > 0)
               {
                  $this -> Read($offset);
               }
               $this -> Cursor += $offset;
               break;
         }
      }
   // Renvoie true ou false si le curseur est déjà passé par offset.
      function WasOffsetRead($offset)
      {
         return (strlen($this -> Data) <= $offset) ? false : true;
      }
   // Renvoie la position du cuseur ...
      function GetCursorPosition()
      {
         return $this -> Cursor;
      }
   // Renvoie true ou false si c'est la fin du fichier ...
      function IsEndOfFile()
      {
         return (feof($this -> Handle)) ? true : false;
      }
      
   // Ferme le flux vers le fichier ...
      function Close()
      {
         fclose($this -> Handle);
      }
   }
/* ------------------------- */
   $fichier = new File('exemple.xml');
   $fichier -> Open();
   echo '<pre>';
   while(!$fichier -> IsEndOfFile())
   {
      echo htmlentities($fichier -> Read());
   }
   echo '</pre>';
   $fichier -> Close();
/* ------------------------- */
?>

Conclusion :


Rien de bien exceptionnel ... Sauf que grâce à cette classe, la méthode File::Seek(); fonctionne aussi bien que le fichier soit distant ou non, ce qui n'est pas le cas avec la fonction fseek(); native en PHP. En fait, c'est uniquement pour ça que j'ai écrit cette classe ;)
Voilà voilà ...
++ !
L.S.

A voir également

Ajouter un commentaire Commentaires
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

En fait, ça m'enerve, ça parce que mon coeur de programmeur est partagé par le notion d'objet. En fait, pour moi, c'est assez radical : soit tout est orienté objet, soit rien. Et du coup, PHP5, c'est vrai que c'est cool pour la P20 (la méthode magique __clone(), ça m'a bien plus :) ) ... Mais dans ce cas, pourquoi on ne considère pas les nombres et les chaines de caractère comme des objets ... Franchement, un :
$texte = new String('Coucou ! ');
echo $texte -> Length;
, ça fait pas tache. En fait, ça manque un peu ...
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
PHP4
$a = new clazz();
$b = $a; // $a !== $b
$c =& $a; // $a === $b

PHP5
$a = new clazz();
$b $a; // $a $b
$c =& $a; // Cette notation n'existe plus en PHP5 pour les classes

Avant en PHP4, on clonait systèmatiquement les objets. C'est pour ça qu'il fallait mettre des & un peu partout (argument et retour de fonction par exemple). En PHP5, on ne clone plus par défaut, on fait une simple référence. Pour cloner on doit précéder l'instance par le mot "clone"
$b = clone $a; ainsi on aura une nouvelle classe (comme en PHP4). Tu peux aussi spécifier comment tu veux que les données soient clonées avec la méthode magique __clone().

(C'est rendu comme Java pour la gestion des classes :))
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

Par lien, ça veut dire quoi ? Par référence ?
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
La gestion des classes est compètement révolue. Elle fonctionne par lien comme ne Java; et private public protected et tout le kit comme tu dis c'est beaucoup plus utile !
Messages postés
129
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
30 juin 2012

Tout dépend de ce que tu en fais, mais c'est quand même plus puissant ...
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.