string
Transcription
string
première rencontre avec… Prog Web Server – 2016-2017 Remerciements à Philippe RenevierGonin pour le matériel du cours. String Array $_GET File Prog Web Server – 2016-2017 Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur 02 / 35 String Array $_GET • $chaine = "une chaine de caractère"; • • • strlen($chaine) pour connaître la taille $chaine{$i} : le (i+1)e caractère . pour concaténer (ajouter deux chaines) • array explode ( string $delimiter , string $string) File – Retourne un tableau découpant $string en fonction des occurrences de $delimiter explode(" / " , "http://deptinfo.unice.fr/~stouati/L1|") donnera : 0 1 2 3 4 http: deptinfo.unice.fr ~stouati L1| Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 – Exemple 03 / 35 String Array $_GET File • $Remplacement des variables par leurs valeurs quand elles sont entre " … " – $msg = "<p>la variable \$chaine vaut : $chaine</p>"; – $msg contient le texte «la variable $chaine vaut : une chaine de caractère» – Caractères spéciaux : pour les voir tels quels il faut les précéder d’un \ • \$ pour avoir un caractère ‘$’ • \n : retour à la ligne ; \t : tabulation • Fonction print de php : pour afficher (générer du html) : Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 – print($msg) ; // le contenu de $msg sera visible dans la page web – echo $msg ; // équivalent – echo "$msg" ; // équivalent 04 / 35 String Array $_GET File Entourez le nom de la variable avec des accolades pour indiquer explicitement son nom. <?php $aliment = ‘fromage'; // Correct, car "," n'est pas autorisé dans les noms de variables echo "Du $aliment et du pain !"; echo "Il a goûté plusieurs $aliments"; echo "Il a goûté plusieurs {$aliment}s"; // Correct ?> Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 // Pas correct, car 's' peut faire partie d'un nom de variable, et PHP recherchera alors $aliments (=> Notice + remplacer par une chaine vide) 05 / 35 String Array $_GET File • Sous chaine de caractère – substr – string substr ( string $string , int $start [, int $length ] ) – Retourne le segment de $string défini par $start et $length. – Ne modifie pas $string – substr("fonctions courantes", 1, 3) "onc" – trim – stringtrim(string$string [,string $character_mask=" \t\n\r\0\x0B" ]) – $title=“ Programming PHP \n” – $string=trim($title); \\$string=“Programming PHP” Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 • Supprime les espaces (ou d'autres caractères) en début et fin de chaîne 06 / 35 String Array $_GET File • Retourne un segment de chaîne – – – – Substr string substr(string $string, int$start[ , int$length] $name= "Fred Flintstone“ $fluff=substr($name, 6, 4); //$fluff = “lint” • Recherche dans une chaine – strpos – int strpos ( string $string , mixed $recherche) – Cherche la position numérique de la première occurrence de $recherche dans $string. – strpos("fonctions courantes", "on") 1 Prog Web Server – 2016-2017 Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur 07 / 35 String Array $_GET File • Remplacement de sous-partie(s) – str_replace – mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) – Pour remplacer les apparitions de $search dans $subject par $replace – Retourne le résultat : un chaine de caractères (ou un tableau) – str_replace("on", "XXX", "fonctions courantes") "fXXXctiXXXs courantes" Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 • on peut limiter ce remplacement à $count fois • Les paramètres peuvent être des tableaux… c.f. ci-dessous… pour des recherches / remplacements successifs sur plusieurs mots 08 / 35 String Array $_GET File • Vers une chaine de caractère – (string) – fonction strval( ) – Conversion automatique (cas d’echo) – Un tableau sera converti en « Array » : utilisation de la fonction var_dump( ) ou print_r( ) cet exemple va afficher: float=3.1 bool=true Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 <?php $b=3.1; $c=true; var_dump($b,$c);?> 09 / 35 String Array $_GET File • Vers un entier – fonction intval retourne la valeur numérique entière équivalente d'une variable echointval(42); //42 echointval(4.2); //4 echointval('42'); //42 Prog Web Server – 2016-2017 Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur 10 / 35 String Array File 0 1 2 3 4 M. Dupond Mme. Martin E.T. Teal’C Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 Association “indice” -> valeur $_GET 11 / 35 String Array $_GET File • Une variable => plusieurs cases (avec chacune un indice différent) => une valeur par case (qui peut être un tableau) • PHP gère dynamiquement la taille des tableaux • indicés soit associatifs. • Tableaux indicés : un entier positif par case. – Compteur/pointeur interne au tableau • Création: $tab[0] = " élément 1 "; $tab[1] = $tab[2] = 120; "élément 2 "; Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 // Ou compteur/pointeur interne au tableau $tab[] = "élément 1 "; // $tab[0] ! $tab[] = "élément 2 "; // $tab[1] ! $tab[] = 120; // $tab[2] ! // Ou fonction « array » $tab = array("élément 1 ", "élément 1 ", 120); 12 / 35 String Array $_GET File • Indexation par clef = une chaine de caractères • Exemple $mes["Vertigo"] = "Hitchcock"; $mes["Sacrifice"] = "Tarkovski"; $mes["Alien"] = "Scott"; // Ou fonction « array » Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 $mes = array( "Vertigo" => "Hitchcock", "Sacrifice" => "Tarkovski", "Alien" => "Scott"); 13 / 35 String Array $_GET File • Une case peut contenir un tableau dont une case (ou plusieurs) peut être un tableau, etc. Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 $tab = array( array("En haut gauche", "En haut droite"), array("En bas gauche", "En bas droite"), array("clef" => 1); // $tab[0][0] == "En haut gauche"; // $tab[0][1] == "En haut droite"; // $tab[1][0] == "En bas gauche"; // $tab[1][1] == "En bas droite"; // $tab[2]["clef"] == 1 14 / 35 String Array $_GET File • Fonction count • Exemple Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 – $tab = array ("élément 1 ", "élément 1 ", 120); count($tab) vaut 3 – $mes = array ( "Vertigo" => array ( "Alfred", "Hitchcock"), "Sacrifice" => array ( "Andrei", "Tarkovski"), "Alien" => array ( "Ridley", "Scott")); count($mes) vaut 3 count($mes["Vertigo"]) vaut 2 15 / 35 String Array $_GET File • unset() détruit les variables spécifiées. (ne retourne pas de valeurs) $arr = array(5 => 1, 12 => 2); revient à $arr[13] = 56; à ce ajoute un nouvel élément avec efface un élément du tableau efface tout le tableau Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 // Ceci moment du script $arr["x"] = 42; // Ceci l'index "x" unset($arr[5]); // Ceci unset($arr); // Ceci $arr[] = 56; 16 / 35 String Array $_GET File • Pour ré-indexer : array_values() $a = array(0 => 'un', 1 => 'deux', 2 => 'trois'); unset($a[1]); /* Cela va produire un tableau qui aurait été $a = array(0 => 'un', 2 => 'trois') et non pas $a = array(0 => 'un', 1 =>'trois'); */ $b = array_values($a); //Maintenant b est le tableau array(0 => 'un', 1 =>'trois') – SORT_REGULAR ; SORT_NUMERIC ; SORT_STRING Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 • sort($tab, flag) : tri 17 / 35 String Array $_GET File • Pour connaitre le type : – gettype( ) (retourne une chaine) – Fonctions qui retournent un booleén : is_array( ), is_float( ), is_int( ), is_object( ) et is_string( ). • isset : pour savoir si elle(s) existe(nt) : Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 – retourne vrai ou faux – permet de savoir si la variable « nom » existe – isset($variable) – isset($v1, $v2, $v3) 18 / 35 String Array $_GET File <?php /* Ces exemples sont spécifiques à l'utilisation de tableaux dans une chaîne. Lorsque vous êtes hors d'une chaîne, utilisez toujours des guillemets autour des index de tableau, et n'utilisez pas d'{accolades}. */ // le tableau $fruits = array('fraise' => 'rouge', 'banane' => 'jaune'); // Affiche « Array » echo "$fruits\n"; // Erreur // echo "Une banane est $fruits['banane']. \n"; // Fonctionne mais PHP cherche une constante appelée banane tel que décrit ci-dessous Notice voire erreur echo "Une banane est {$fruits[banane]}. \n"; // Fonctionne echo "Une banane est " . $fruits['banane'] . ". \n"; ?> Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 // Fonctionne echo "Une banane est {$fruits['banane']}. \n"; 19 / 35 String Array $_GET File • C'est un moyen simple de passer en revue un tableau • Deux syntaxes • À chaque itération, la valeur de l'élément courant est assignée à $value et le pointeur interne à la liste (tableau) est avancé d'un élément • ce qui fait qu'à la prochaine itération, on accédera à l'élément suivant. Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 foreach($tableau as $value) { /* $value prend successivement toutes les valeurs contenues dans $tableau toutes les instructions faites dans ce bloc sont exécutées pour chaque valeur */} 20 / 35 String Array $_GET File foreach($tableau as $clef => $valeur) { /* $valeur prend successivement toutes les valeurs contenues dans $tableau. Dans le même temps, $clef correspond à l’indice (ou la clef) de cette valeur dans le tableau. Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 Toutes les instructions faites dans ce bloc sont exécutées pour chaque couple (clef, valeur) */ 21 / 35 String Array $_GET File $liste = glob("news/politique/*.news"); /* $liste contient 5 éléménts, 01.news, 02.news, …, 05.news */ Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 foreach($liste as $indice => $f) { /* Il y aura 5 itérations, car il y a 5 éléments les couples ($indice, $f) seront successivement: (0, "news/politique/01.news") (1, "news/politique/02.news") (2, "news/politique/03.news") (3, "news/politique/04.news") (4, "news/politique/05.news") */ 22 / 35 String Array $_GET File • Exécute une itération à chaque passage de la boucle – Itération sur les indices – Ou pour «n» iterations • Il faut préciser: – l’initialisation du compteur d’iteration • On peut commencer à 0; à 2; etc.. • Attention à la plage des indices d’un tableau • Limite supérieur si le compteur augmente • Limite inférieur si le compteur diminue Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 – la condition d’arrêt de la boucle; – la ou les instructions faisant évoluer ces valeurs à chaque itération 23 / 35 String Array $_GET File // lecture d’un fichier $lecture_fichier= file("news/politique/01.news"); $nb_lignes= count($lecture_fichier); $contenu_article= ""; Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 /* exemple de boucle à rebours il faut faire bien attention au test de fin et à l’évolution de la variable d’itération */ for($cpt = $nb_lignes; $cpt >= 2; $cpt--) { /* on inverse le contenu du fichier */ /* en ne gardant pas les 2re lignes */ $contenu_article.= $lecture_fichier[$cpt]; } 24 / 35 String Array $_GET File Prog Web Server – 2016-2017 En attendant les formulaires… Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur 25 / 35 String Array $_GET File • Chaque page exécutée (ou obtenue) indépendamment • Continuité dans la navigation, dans l’interaction • Comment partager des valeurs ? Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 – Persistance à long terme (fichiers, bd) – Persistance à court terme (session) – Formulaires (saisie par l’utilisateur) – Paramètre dans l’url et lien spécifique 26 / 35 String Array $_GET File • Ajout à la fin de l’url • http://serveur.domaine/chemin/page?variable=valeur • Une variable dans une url se définit par – Un nom – Une valeur (après égal) • Plusieurs variables possibles – Séparation par des & entre les variables • Fonctionne dans des liens <a href="…?q=Philippe+Renevier-Gonin&aq=f"> Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 – https://www.google.fr/search?q=Philippe+RenevierGonin&aq=f&oq=Philippe+RenevierGonin&aqs=chrome.0.59j61l3j0j62.6424&sourceid=chrome&ie=UTF-8 27 / 35 String Array $_GET File • $_GET – Variable super globale • http://www.php.net/manual/fr/language.variables.superglobals.php – Un tableau associatif des valeurs passées au script courant via les paramètres d'URL. • Les clefs sont les noms des variables de l’url • Les valeurs sont définies après le signe = (et avant le &) – Des chaines de caractères ! – C.f. Conversion en int… – Encodage avec urlencode ou rawurldecode • Décodage déjà fait avec $_GET • Utilisable directement avec urldecode ou rawurldecode – http://www.faqs.org/rfcs/rfc3986.html Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 • Encodage de l’url 28 / 35 String Array $_GET File Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 $val = "valeur par defaut"; If ( isset($_GET["variable"]) ) { $val = $_GET["variable"]; // déjà décodé (codage url comme %20) // faire des tests sur les valeurs… // conversion } 29 / 35 String Array $_GET File Prog Web Server – 2016-2017 Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur 30 / 35 String Array $_GET File • Enregistrer les données sur un disque dur – Pérennité – Partage ou pas (configuration de apache) (sauvegarde en dehors du web) – aucun format imposé • Mais code « bas niveau » Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 • Souplesse de programmation 31 / 35 String Array $_GET File • Équivalent des opérations sur les fichiers fournies par les systèmes d’exploitation • glob ( $pattern) : recherche des chemins qui vérifient une expression $pattern <?php $files = glob("*.php"); // que les fichiers php du dossier courant foreach ($files as $filename) { echo « <a hef="$filename >".basename($filename)."</a><br />\n"; } ?> is_dir ($nomFichier) -- Indique si le fichier est un dossier is_file ($nomFichier) -- Indique si le fichier est un fichier • • is_readable ($nomFichier) -- Indique si un fichier est autorisé en lecture is_writable ($nomFichier) -- Indique si un fichier est autorisé en écriture – Les résultats de ces fonctions sont mis en cache Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 • • 32 / 35 String Array $_GET File • file($nomFichier) • Lecture de tout un fichier sous forme d’un tableau de string, 1 ligne = une case • Fin de ligne présent – rtrim($str) : enlève les « espaces » à la fin de $str Prog Web Server – 2016-2017 • url possible Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur 33 / 35 String Array $_GET File • Fichier info.txt • Traitement en php : Ce fichier contient : 1. Plusieurs Lignes 2. Avec différentes informations departement: 06 Numero fichier : 1 $contenu = file("info.txt"); // $contenu[0]=="Ce fichier contient :\n" // $contenu[1]=="1. Plusieurs Lignes\n" // $contenu[2]=="2. Avec différentes informations\n" // $contenu[3]=="departement: 06\n" // $contenu[4]=="Numero fichier : 1" Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 // pour extraire le 1 : explode et cast $tmp = explode(":", $contenu[4]); // $tmp[0]=="Numero fichier " // $tmp[1]==" 1" $numFichier = intval($tmp[1]); // $numFichier vaut 1 34 / 35 String Array $_GET File • file_get_contents($nomFichier, [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]]) – Idem file, mais le résultat est dans une chaine – Possibilité de préciser une sous partie (par des octets) – Utilisation possible de include_path de php.ini pour rechercher le fichier – $context : NULL (si on n’en utilise pas) – Pour écrire dans un fichier – $date : string ou tableau (ou stream resource) – $flags : FILE_USE_INCLUDE_PATH ou FILE_APPEND ou LOCK_EX Elena Cabrio - Chaine – tableau - $_GET - fichier - Prog Web Serveur Prog Web Server – 2016-2017 • file_put_contents(string $nomFichier, mixed $data [, int $flags = 0 [, resource $context ]]) 35 / 35