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

Documents pareils