X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;ds=sidebyside;f=unix_prog_web%2Funix_prog_web_07.xhtml;fp=unix_prog_web%2Funix_prog_web_07.xhtml;h=73d92d164e91096949640a3afa24624b7611b996;hb=0a552a95e70324a04e9d06bd30ac5bc96b2a58b5;hp=0000000000000000000000000000000000000000;hpb=171bd61f3e4cf06638c6a90fdc053efbec9623ff;p=hacks%2FsimpleWebSlides.git diff --git a/unix_prog_web/unix_prog_web_07.xhtml b/unix_prog_web/unix_prog_web_07.xhtml new file mode 100644 index 0000000..73d92d1 --- /dev/null +++ b/unix_prog_web/unix_prog_web_07.xhtml @@ -0,0 +1,457 @@ + + + +
+Les fonctions sont déclarées à l'aide du + mot-clé function. On renvoie des résultats à + l'aide du mot-clé return.
+function double ($x)
+ {
+ return $x + $x;
+ }
+
+ echo double(10);
+ ]]>
+
+ <?php
+ $a = 42;
+ function add_a($x)
+ {
+
+ return $x + $a;
+ }
+ echo add_a(10);
+ ?>
+
+ <?php
+ $a = 42;
+ function add_a($x)
+ {
+ global $a;
+ return $x + $a;
+ }
+ echo add_a(10);
+ ?>
+
+ Le code de gauche affiche 10 ! + Les variables ont une portée locale + par défaut. Si $a n'est pas définie dans le corps de la + fonction, sa valeur est NULL + (variable non définie). Pour référencer + des variables globales, on utilise le mot clé global. +
+On peut utiliser une fonction « avant » de la définir :
<?php
+ echo next(10);
+ echo <br/>;
+
+ function next($x)
+ {
+ return $x + 1;
+ }
+ ?>
+ On définira toujours des fonctions avant de + les utiliser. On ne peut pas définir deux fonctions avec le même + nom. +
+On utiliser le modificateur & devant + un paramètre de fonction pour indiquer que ce dernier est passé + par référence.
+<?php
+ function add_a($tab)
+ {
+ $tab["a"] = 42;
+ }
+
+ $mytab = array();
+ add_a($mytab);
+ echo $mytab["a"];
+ //n'affiche rien (car NULL â "")
+?>
+ <?php
+ function add_a(&$tab)
+ {
+ $tab["a"] = 42;
+ }
+
+ $mytab = array();
+ add_a($mytab);
+ echo $mytab["a"];
+ //affiche 42
+?>
+ Lorsque l'on veut modifier un argument de la + fonction (plutot que de renvoyer une version modifiée, par + ex. mise à jour d'un tableau, d'une chaîne, â¦), on doit le + passer par référence. +
+Les expressions régulières de PHP sont au format PCRE (Perl + Common Regular Expressions) '/r/' + où r est une expression de la forme:
+
+
+ r ::= a (un caractère)
+ | . (n'importe quel caractère)
+ | r1 | r2 (r1 ou r2)
+ | r? (r répétée au plus 1 fois)
+ | r* (r répétée 0 fois ou plus)
+ | r+ (r répétée 1 fois ou plus)
+ | [c1 ⦠cn] (un caractère parmis c1, â¦, cn)
+ | [c1-cn] (un caractère parmis c1, â¦, cn)
+ | [^c1 ⦠cn] (un caractère sauf c1, â¦, cn)
+ | [^c1-cn] (un caractère sauf c1, â¦, cn)
+ | ^ (début de texte)
+ | $ (fin de texte)
+ | (r) (r elle même)
+
+
+
+
+ preg_match($regexp, $chaine)
+ renvoie 1 si une sous-chaine de $chaine
+ correspond à $regexp, 0 si aucune sous-chaine ne correspond
+ et FALSE en cas de problème (attention,
+ utiliser === pour tester le résultat).
+
<?php
+ $chaine = "ABCDEFABCDEF";
+ echo preg_match('/ABC/', $chaine); // affiche 1
+ echo preg_match('/DEF/', $chaine); // affiche 1
+ echo preg_match('/^ABC/', $chaine); // affiche 1
+ echo preg_match('/^DEF/', $chaine); // affiche 0
+ echo preg_match('/ABC$/', $chaine); // affiche 0
+ echo preg_match('/DEF$/', $chaine); // affiche 1
+ echo preg_match('/(ABC...)+/', $chaine); // affiche 1
+ echo preg_match('/[^A-Z]+/'); // affiche 0
+ echo preg_match('/[^A-Z]*/'); // affiche 1 !
+ echo preg_match('/^[^A-Z]*$/'); // affiche 0
+?>
+ preg_replace($regexp, $motif, $chaine)
+ recherche toutes les sous-chaînes de $chaine reconnues + par $regexp et les remplace par $motif. Ce dernier + peut contenir $i pour référencer + le ième groupe de parenthèses
+<?php
+ $chaine = "10-31-1981";
+ $reg1 = "/([0-9]+)-([0-9]+)-([0-9]+)/";
+ echo preg_replace($reg1, "$2/$1/$3", $chaine);
+ // affiche 31/10/1981
+
+ $reg2 = "/1/";
+ echo preg_replace($reg2, "toto", $chaine);
+ // affiche toto0-3toto-toto98toto
+
+ $reg3 = "/[0-9]([0-9]*)/"
+ echo preg_replace($reg3, "$1", $chaine);
+ // affiche 0-1-981 (* déplie la regexp le plus possible)
+?>
+ preg_split($regexp, $chaine)
+ renvoie un tableau des sous-chaine de $chaine séparées + par $motif (équivalent à explode pour + des $regexp constantes).
+<?php
+ $chaine = "Une phrase, c'est plusieurs mots.";
+ print_r (preg_split("/[ ,.']+/", $chaine));
+ //Affiche:
+ //Array ( [0] => Une [1] => phrase [2] => c [3] => est
+ // [4] => plusieurs [5] => mots [6] => )
+?>
+ preg_match_all($regexp, $chaine, &$resultat)
+ &$resultat est un tableau passé par + référence. Après l'appel, $resultat[0] contient un + tableau avec toutes les sous-chaines reconnues + et $resultat[i] contient tous les résultats reconnus par le + ième groupe de parenthèses. Renvoie le nombre de chaines + trouvées (i.e. la longueur de $resultat[0]). +
+<?php
+ $res = array();
+ $chaine = "ABC ACD AEF AB DEF";
+ echo preg_match_all("/A([A-Z]*)/", $chaine, $res);
+ //Affiche 4
+ print_r ($res);
+ /*Affiche
+ Array ( [0] =>
+ Array ( [0] => ABC [1] => ACD [2] => AEF [4] => AB)
+ [1] =>
+ Array ( [0] => BC [1] => CD [2] => EF [4] => B)
+ )
+*/?>
+On utilise la méthode post pour les + formulaires. Les valeurs sont envoyées dans la requête HTTP (et non + pas encodées dans l'URL)
+
+ <form action="cible.php" method="post"
+ enctype="multipart/form-data">
+ <input type="file" name="fichier" size="20"/>
+ <button type="sumbit">Uploader le fichier</button>
+ </form>
+
+Apperçu:
+Coté serveur, la variable $_FILES est
+ définie. $_FILES["fichier"] contient un
+ tableau avec des informations sur le fichier envoyé. Les autres
+ champs (par exemple valeur d'un champ texte) sont stockés dans la
+ variable $_POST (au lieu de $_GET).
+
Ãtant donné un formulaire avec un champ input de + type file et de nom "fichier" on a accès aux + information suivantes:
+ fopen($nomfichier, $mode)
+Ouvre un fichier dont on donne le nom avec un mode + particulier. Les modes sont: "r" + (lecture), "r+" (lecture/écriture), + "w" (écriture), + "w+" (lecture/écriture, création si non-existant), + "a" (écriture, ajout à la fin si existant), + "a+" (lecture/écriture, création si non-existant, + ajout à la fin si existant). fopen renvoie un + descripteur de fichier que l'on peut utiliser pour manipuler le + fichier. +
. + fread($desc, $taille)
+Lit au maximum $taille caractères dans un fichier + dont le descripteur (renvoyé par fopen) + est $desc. La fonction renvoie un chaine d'au + plus $taille caractères ou FALSE en cas d'erreur. +
+ fwrite($desc, $chaine)
+Ãcrit la chaine de caractères à la position courante dans le + fichier dont le descripteur est $desc. Renvoi le nombre + d'octets écrits ou FALSE en cas d'erreur. +
+ fclose($desc)
+Ferme le fichier dont le descripteur est $desc +
+ fseek($desc, $offset, $orig)
+ Déplace le pointeur interne de position du fichier dont le + descripteur est $desc de $offset octets. Le + paramètre $orig donne l'origine: SEEK_CUR + (décalage à partir de la position courante), SEEK_SET + (position absolue dans le fichier), SEEK_END (décalage à + partir de la fin de fichier). +
+ file_get_contents($nomfichier)
+Ouvre un fichier dont on donne le nom et renvoie son contenu sous + forme d'une chaine de caractères
+ file($nomfichier)
+Renvoie un tableau avec une case par ligne dans le fichier. Chaque + entrée contient le "\n" terminal.
+