Vous êtes sur la page 1sur 11

29/03/2012

Universit Ibn Tofal Facult des Sciences Knitra

A.U. 2011/2012

Chap 2 : Fonctions et fichiers

Licence SMI

Pr. E. AMEUR

DclarationDclaration-Dfinition
Une fonction peut tre dclarer l'aide de l'instruction function. function. function nom_fonction (paramtres) { Corps de la fonction } On ne prcise ni le type des paramtres, ni le type de la valeur de retour! Exemple: Exemple: function min($n1, $n2) { min($ return ( $n1 < $n2) ? $n1 : $n2; } $min = min(3, 2); // => $min vaut 2 min(3

29/03/2012

Arguments
Par dfaut, les arguments d'une fonction sont transmis par valeur. valeur. Exemple: Exemple: function inc($n1, $n2) { inc($ $n1++ ; $n2++; ++; } $a = $b = 1; inc($a,$b); // => $a et $b valent toujours 1! inc($a,$b); Si un argument est transmis par rfrence, toute modification apporte la variable paramtre modifie la variable de l'instruction d'appel. d'appel. Placer & avant le nom du paramtre afin d'indiquer que l'argument doit tre transmis par rfrence. rfrence. Exemple: Exemple: function inc($n1, &$n2) { inc($ $n1++ ; $n2++; ++; } $a = $b = 1; inc($a,$b); // => $a vaut toujours 1, $b vaut 2! inc($a,$b);

Valeur par dfaut


On peut donner une valeur par dfaut aux arguments lors de la dclaration de la fonction. fonction. Il suffit d'affecter une valeur au paramtre au moment de la dclaration. dclaration. Tous les paramtres possdant des valeurs par dfaut doivent figurer droite des paramtres qui en sont dpourvus. dpourvus. Exemple: Exemple: <?php function affichColorer($text, $Color = "black") { affichColorer($ print("<font color=$Color>$text</font>" ); color=$Color>$ } affichColorer("Voici un texte en noir"); noir"); print("<br />\n"); />\n"); affichColorer("Voici un texte en bleu","blue"); bleu","blue"); print("<br />\n"); />\n"); ?>

Donne : Voici un texte en noir Voici un texte en bleu

29/03/2012

Porte des variables


La porte dune variable diffre selon son emplacement au sein du code PHP. PHP. Les variables peuvent avoir une porte globale si elles sont dfinies en dehors d'une fonction. Sinon, elles seront locales. fonction. locales. <?php $a = 1; /* porte globale */ function test() { echo $a; /* porte locale */ } test(); test(); ?> lappel de test() naffiche RIEN Les variables globales peuvent tre utilises dans une fonction condition de dclarer nouveau les variables dans la fonction avec le mot-cl global ou en motutilisant le tableau associatif prdfini $GLOBALS. GLOBALS. function test(){ global $a; echo $a; } ou { echo $GLOBALS["a"]; } GLOBALS["a"]; lappel de test() affiche 1

Variable static
Permet de conserver les valeurs gnres par les appels prcdents de la fonction. fonction. Dclaration au dbut dune fonction. fonction. <?php $chaine = "Nombre de cours : "; function ajouteCours($mode='') { ajouteCours($ global $chaine; chaine; static $nb=0; nb=0 $nb++; // on incrmente le nombre de cours nb++; if($mode == "affiche") if($ { echo $chaine.$nb; } // on affiche le nombre de cours chaine. nb; } ajouteCours(); ajouteCours(); // nb == 1 ajouteCours(); ajouteCours(); // nb == 2 ajouteCours(); ajouteCours(); // nb == 3 ajouteCours(); ajouteCours(); // nb == 4 ajouteCours(); ajouteCours(); // nb == 5 ajouteCours("affiche"); ajouteCours("affiche"); // affiche Nombre de cours : 6 ?>

29/03/2012

Appel dynamique de fonction


On peut paramtrer une variable avec le nom dune fonction, Puis lutiliser comme une fonction. fonction.

<?php function afficher($text) afficher($ { print($text); print($text); } function afficherGras($text) afficherGras($ { print("<b>$text</b>"); print("<b>$text</b>"); } Donne : bonjour ! Aurevoir !

$MaFonction="afficher"; $MaFonction("bonjour !"); print("<br />\n"); $MaFonction="afficherGras"; $MaFonction("Aurevoir !"); print("<br />\n"); ?>

Formats pour la fonction date()


Cl

description Jour du mois sur deux chiffres [01..31] j Jour du mois sans les zros initiaux Jour de la semaine textuel en version longue et en anglais Jour de la semaine textuel en trois lettres et en anglais Jour de la semaine numrique [0..6] (0: dimanche) Jour de l'anne [0..365] Mois de l'anne sur deux chiffres [01..12] n Mois sans les zros initiaux Mois textuel en version longue et en anglais Mois textuel en trois lettres Anne sur 4 chiffres y Anne sur 2 chiffres Heure au format 12h [01..12] g Heure au format 12h sans les zros initiaux Heure au format 24h [00..23] G Heure au format 24h sans les zros initiaux Minutes [00..59] s Secondes [00.59] am ou pm A AM ou PM Boolen pour savoir si l'anne est bisextile (1) ou pas (0) Suffixe ordinal anglais d'un nombre (ex: nd pour 2) Nombre de jour dans le mois donn [28..31]

d I D w z m F M Y h H i a L S t

29/03/2012

Les fichiers

La manipulation de fichier se fait grce un identifiant de fichier. fopen($file ,$mode) : ouverture du fichier identifi par son nom $file et dans un mode $mode particulier, retourne un identificateur $fp de fichier ou FALSE si chec. fclose($fp) : ferme le fichier identifi par le $fp fgets($fp, $length) : lit une ligne de $length caractres au maximum fputs($fp, $str) : crit la chane $str dans le fichier identifi par $fp feof($fp) : teste la fin du fichier file_exists($file) : indique si le fichier $file existe filesize($file) : retourne la taille du fichier $file filetype($file) : retourne le type du fichier $file unlink($file) : dtruit le fichier $file copy($source, $dest) : copie le fichier $source vers $dest rename($old, $new) : renomme le fichier $old en $new

29/03/2012

fopen
La fonction fopen permet d'ouvrir des : - fichiers dont le chemin est relatif ou absolu - ressources avec le protocoles HTTP.. Elle renvoie un identificateur $fp ou FALSE si l'ouverture choue. $fp Exemples : $fp = fopen("c:\\Appserv\\www\\exemples\\donnees.txt", "r"); fopen("c:\ Appserv\ www\ exemples\ $fp = fopen("http://www.php.net/","r");

Les modes douverture :

'r' : lecture seule, 'r+: lecture et criture, 'w' : cration et criture seule, 'w+ : cration et lecture/criture, 'a: cration et criture seule ; place le pointeur de fichier la fin du fichier, 'a+:cration et lecture/criture ; place le pointeur de fichier la fin du 'a+:cration fichier.

fread
Ouvrir le fichier lui assigner un pointeur. Agir sur le fichier grce au pointeur. pointeur et extraire ses donnes dans une variable puis fermer le fichier <?php <?php $fichier="c:\\Appserv\\www\\exemples\\donnees.txt"; fichier="c: Appserv\ www\ exemples\ donnees.txt"; $mode="r"; mode="r"; if ($fp= fopen($fichier, $mode) ) fp= fopen( echo "Le fichier est ouvert"; ouvert"; else echo "Fichier impossible ouvrir"; ouvrir"; filesize( //filesize $taille = filesize($fichier) ; //filesize : retourne la taille en octets dun fichier $data= fread($fp, $taille); fread( fp, taille); if ( fclose($fp) ) echo "Le fichier est ferm"; fclose( fp) ferm"; echo $data; data; ?>

29/03/2012

fgets
<?php <?php $fichier="c:\ Appserv\ www\ exemples\ $fichier="c:\\Appserv\\www\\exemples\\donnees.txt"; $mode="r"; $fp= fopen($fichier, $mode) ; fp= fopen($fichier, $taille = filesize($fichier) ; filesize($fichier) while(! feof($fp)) while(! feof($fp)) { $ligne= fgets($fp, $taille); fgets($fp, print("$ligne <br />\n"); print("$ligne <br />\ } fclose($fp) fclose($fp) ; ?>

file
<?php <?php $fichier="c:\ Appserv\www\ exemples\ $fichier="c:\\Appserv\www\\exemples\\donnees.txt"; $data= file($fichier); //lit le contenu du fichier et le place dans un tableau foreach($data foreach($data as $ligne) print("$ligne <br />\ print("$ligne <br />\n"); ?>

29/03/2012

file_get_contents
<?php <?php $fichier="c:\\Appserv\\www\\exemples\\donnees.txt"; fichier="c: Appserv\ www\ exemples\ donnees.txt"; $data= file_get_contents($fichier); file_get_contents( fichier); /*lit lintgralit du fichier et le place en une seule fois dans une chane de caractres.*/ caractres. echo $data; data; ?>

fwrite
<?php <?php $fichier="c:\ Appserv\ www\ exemples\ $fichier="c:\\Appserv\\www\\exemples\\donnees.txt"; $mode="w $mode="w"; $fp= fopen($fichier, $mode); fp= fopen($fichier, fwrite($fp,"on fwrite($fp,"on crit ici la ligne a sauvegarder \n");

fclose($fp) fclose($fp) ;

?>

29/03/2012

file_put_contents
<?php $fichier="c:\\Appserv\\www\\exemples\\donnees.txt";

$ligne = "on crit ici la ligne a sauvegarder"; file_put_contents ($fichier, $ligne);

?>

Parcourir des rpertoires


Il est possible de parcourir les rpertoires en utilisant : chdir($str) chdir($str) : Change le dossier courant en $str. Retourne TRUE si succs, sinon FALSE. getcwd() getcwd() : Retourne le nom du dossier courant (en format chane de caractres). opendir($str): opendir($str): Ouvre le dossier $str, et rcupre un pointeur $d dessus si succs, FALSE sinon et gnre alors une erreur PHP qui peut tre chappe avec @. closedir($d) closedir($d) : Ferme le pointeur de dossier $d. readdir($d) readdir($d) : Lit une entre du dossier identifi par $d. Cest--dire retourne Cestun nom de fichier de la liste des fichiers du dossier point. Ou bien retourne FALSE sil ny a plus de fichier. rewinddir($d) rewinddir($d) : Retourne la premire entre du dossier identifi par $d.

29/03/2012

Upload de fichier (1)


Le protocole HTTP permet l'utilisateur de tlcharger des fichiers sur le serveur via un formulaire HTML. Ce formulaire doit contenir : HTML. Un attribut supplmentaire dans la balise <form> : enctype="multipart/formenctype="multipart/form-data" autant de balises <input type="file"> que de fichiers tlcharger. tlcharger. ventuellement, une balise qui prcise la taille maximale du fichier accept, en octets ( placer avant la balise file) <input type="hidden" name="MAX_FILE_SIZE" value=1024"> value=1024" Exemple : <form action="upload.php method="POST" enctype="multipart/form-data"> action="upload. enctype="multipart/formVotre Photo : <input type="file" name="photo"><br> <input type="submit" value="envoyer"> </form>

Upload de fichier (2)


Une fois le formulaire post : les fichiers indiqus par l'utilisateur sont tlchargs sur le serveur et enregistrs dans un rpertoire temporaire. temporaire. la page php indique dans l'action du formulaire sexcute, elle consulte la variable globale $_FILES : un tableau associatif contenant toutes les informations des fichiers tlchargs, chaque fichier sobtenant en utilisant pour cl le nom de la balise file. file. Exemple: Exemple: $_FILES['photo']['name'] : le nom du fichier stock sur la machine du client qui envoie le fichier. fichier. $_FILES['photo']['tmp_name'] : le nom du fichier stock sur le serveur (le fichier a donc t reu). reu). $_FILES['photo']['size'] : la taille du fichier en octets. octets. $_FILES['photo']['error'] :ventuellement un code d'erreur pendant le transfert. transfert.

10

29/03/2012

Upload de fichier (3)


L'tape suivante consiste copier le/les fichiers tlchargs dans un rpertoire dfinitif : copy($ copy($_FILES['photo']['tmp_name'], "chemin/destination/". _FILES['photo']['name']); "chemin/destination/".$_FILES['photo']['name']); Ou move_uploaded_file($ move_uploaded_file($_FILES['photo']['tmp_name'], "chemin/destination/". _FILES['photo']['name']); "chemin/destination/".$_FILES['photo']['name']); Exercice: Exercice:
Ecrire un formulaire contentant deux boutons permettant de choisir deux fichiers tlcharger. tlcharger. Le script destinataire compare leurs tailles et nous informe qui est le plus grand. grand.

11