130 likes | 236 Views
Programmation Internet en PHP SIL module M12. Jean-Michel Ilié IUT Paris 5 - département informatique. Partie III : SGF et Gestion des fichiers. PLAN du cours. Introduction Gestion des fichiers Gestion des répertoires Téléchargement de fichiers Base de données fichiers.
E N D
Programmation Internet en PHP SIL module M12 Jean-Michel Ilié IUT Paris 5 - département informatique Partie III : SGF et Gestion des fichiers
PLAN du cours • Introduction • Gestion des fichiers • Gestion des répertoires • Téléchargement de fichiers • Base de données fichiers
Intérêts des traitements fichiers côtés serveur • Installation de site automatisée • fichiers • système de répertoires • gestion de la sécurité • Partage de fichiers - téléchargement (upload) • Administration du site à distance
Gestion des fichiers • Ouverture et fermeture • Afficher des fichiers • Lire et Ecrire • Naviguer dans le fichier • Copier, supprimer, déplacer • Gestion des répertoires • Attributs des fichiers
Gestion des fichiers Ouvrir, afficher, fermer • int $ff =fopen ('nom_fic', str_mode[b]); //str_mode : a : ajout; a+ : ajout/lecture; //r:lecture; r+ : lecture/écriture débutFic; //w: remplacement; w+: remplacement/lecture.. //Rajouter 'b' si fichier binaire (sous windows) //ff= 0 si échec sinon le pointeur du fichier • $bool= fclose ($ff); • $bool=fpassthru($ff); //envoie le (reste du) fichier sur la sortie standard (vers le navigateur) <?php if (!$ff=fopen("img.gif", "rb")) echo "affichage de l'image impossible"; else fpassthru($ff); ?>
Gestion des fichiers • $c= getc ($ff); • $txt= fread($ff, int_lg); //strlen(txt)=lg • $txt= fgets($ff, int_lg+1); //lecture de lignes • $txt= fgetss($ff, int_lg); //similaire, sans rendre les balises HTML, PHP • $bool=feof($ff); //pour tester la fin de fichier • $tab=file($ff); //lecture et insertion des lignes //dans le tableau : tab[i]= la ième ligne • $bool= fputs ($ff, str, [int_lg]); //str= chaîne à écrire • $bool = fwrite ($ff, str, [int_lg]); • $bool = rewind ($ff); //réinitialise le pointeur • $bool = fseek ($ff, int_decalage); //décalage absolu en octets : -1 si échec et 0 si réussite Lire, Naviguer, Ecrire <?php... $tab = file($ff); for ($i=0; $i<count($tab), $i++) echo "ligne $i = $tab[$i]"; ?>
Gestion des fichiers Copier, déplacer, détruire, existence • $bool = copy ("src", "dest"); • $bool = rename ("src", "dest"); • $bool = unlink ("fic"); //supprime • $bool = file_exists ("fic"); //test <?php... if (! file_exists($fichier)) {echo 'rien à copier'; exit ;} if (! copy ($fichier, "c: .. /image/")) {echo 'pb de copie'; exit ;} ?> //alternative : (@ évite les exceptions) @file_exists($fichier) or die ('rien à copier'); @copy($fichier, "c: .. /image/") or die ('erreur copie');
Gestion des répertoires • $bool = chdir ("nom_rep"); //positionne le répertoire courant • $bool = mkdir ("nom_rep", int_mode); //mode : permission d'accès unix (Windows l'ignore) • $bool = rmdir ("nom_rep"); //si vide, détruit le répertoire • $dd = opendir ("nom_rep"); //ouverture (par défaut le répertoire courant) • $str = readdir ($dd); //lit la prochaine entrée du répertoire • rewinddir ($dd); //se place sur la 1er entrée du répertoire • closedir ($dd); //ferme Ouvrir, afficher, positionner créer, détruire <?php... if (!mkdir ("/temp", 0700) ) echo "creation imposible";?> <?php $rep=opendir("../") while ($nom_fich =readdir ("$rep")) echo "$nom_fic"; chdir ("/temp"); ?>
Téléchargement(upload) Formulaire de téléchargement <FORM action="upload.php" method="POST" enctype="multipart/form-data"> Envoyer ce fichier : <input type="file" name="userfile"><BR> <input type= "submit"><BR> </FORM> • Variables créées sur le serveur : • $_FILES['userfile']['name'] //intitulé initial • $_FILES['userfile']['size'] //taille • $_FILES['userfile']['type'] //type MIME • $_FILES['userfile']['tmp_name'] // fichier temporaire créé par le téléchargement
Téléchargement(upload) <html><form action="upload.php" method="post" enctype="multipart/form-data"> Envoyer ce fichier : <INPUT type= "file" name="userfile"><BR> <INPUT type="submit"><BR> </form></html> parcours du SGF client Téléchargement puis copie <html> Fichier soumis :<BR><BR> Nom : <? echo$_FILES['userfile']['tmp_name']; ?><BR> Nom temporaire : <? echo $_FILES['userfile']['name']; ?><BR> Taille : <? echo $_FILES['userfile']['size']; ?><BR> Type : <? echo $_FILES['userfile']['type']; ?><BR> <?$dest=".\\upload.txt"; //!!!Barres obliques inverses //!!! à Doubler. if (copy($_FILES['userfile']['tmp_name'], $dest)) echo("<B>copie réussie.</B>"); else echo("<B>echec de copie.</B>"); unlink($_FILES['userfile']['tmp_name']); ?></html> // Supprimer le fichier temporaire
Bases de données en fichiers(BD non relationnelle) Table à deux entrées Identifiant / Valeur (équivalent dictionnaire) $db= dba_open ($dbpath, "acces", $dbtype, [int_model]); //chemin de la base : $dbpath (ex : database.db) //acces : 'r', 'w', 'c' (création) ou 'n' (écraser les données existantes) //' type $dbtype de gestion : 'gdbm' (GNU unix), db2, 'cdb' (qmail) //rend false si échec $id= dba_firstkey($db); $id= dba_nextkey($db); //rend false en fin dba_fetch($id, $db); //rech par $id dba_delete ($id, $db); dba_replace ($id, 'valeur', $db); dba_sync($db); //réalisation effective des modifications dans la base dba_close($db); Fct sup : la sérialisation des entrées $ch= serialize($tab); // de tableau en chaîne $tab= deserialize($ch); // de chaîne en tableau
Exercices • Gestion des fichiers utilisateurs • Administration des fichiers et répertoires du serveur
ApplicationGestion d'un carnet d'adresse Table carnetAdresse (base PHP) NOM EMAIL (PRIMARY KEY) VILLE DESCRIPTION TELEPHONE $creat = "CREATE TABLE $tab ( NOM VARCHAR(255), EMAIL VARCHAR(255), VILLE VARCHAR(255), DESCRIPTION VARCHAR(255), TELEPHONE VARCHAR(255), ID INT PRIMARY KEY AUTO_INCREMENT )"; • Actions sur la table • Ajouter un enregistrement • Rechercher un enregistrement • modifier • Détruire