Valid XHTML     Valid CSS2    

Listing du fichier tutphp7.php

 

00001     <?php
00002     
include("std7.php") ;
00003     
00004     
$PHP
= s_span("PHP","grouge") ; # pratique pour colorier toutes les occurences du mot PHP
00005     
$PHP4
= $PHP.s_span(" 4","grouge") ;
00006     
$PHP5
= $PHP.s_span(" 5","grouge") ;
00007     
$PHP7
= $PHP.s_span(" 7","grouge") ;
00008     
$HTML
= s_span("HTML","gvertf") ;
00009     
$XHTML
= ghVert("XHTML") ; # c'est plus court &agrave; &eacute;crire, n'est-ce pas ?
00010     
$FTP
= s_span("FTP","gvertf") ;
00011     
$XML
= s_span("XML","gbleu") ;
00012     
$Perl
= s_span("PERL","gbleu") ;
00013     
00014     
debutPage
("tuteur PHP","strict") ;
00015     
debutSection() ;
00016     
h1
("Un petit tuteur $PHP -- a small $PHP tutorial") ;
00017     
h2
(snbsp(8)."gilles.hunault@univ-angers.fr","grouge") ;
00018     
00019     
h1
(aname("Table","tdm")." des mati&egrave;res") ;
00020     
00021     
div
("cadre demiLargeur") ;
00022     
p() ;
00023     
nbsp
(7) ;
00024     echo
s_span
("Voulez-vous voir un ".href("../tdc.htm","tour de cartes")." en $PHP&nbsp;?","gvertf") ;
00025     
finp() ;
00026     
findiv() ;
00027     
00028     
00029     
$GLOBALS
["sect"] = 0 ; # sans doute pas une bonne id&eacute;e, &agrave; discuter en cours...
00030     
00031     
p
() ; $sect++ ; echo "$sect.&nbsp; ".href("#tth_sEc1$sect","&nbsp;Pr&eacute;sentation de $PHP&nbsp;","bouton_fin orange_pastel nou") ; finp() ; $sous = 0 ;
00032     
00033     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.$sous","Versions de $PHP") ; finp() ;
00034     
00035     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.$sous","Exemples de code $PHP") ; finp() ;
00036     
00037     
p
() ; $sect++ ; echo "$sect.&nbsp; ".href("#tth_sEc$sect.","&nbsp;El&eacute;ments du langage de $PHP&nbsp;","bouton_fin jaune_pastel nou") ; finp() ;
00038     
00039     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.1","Commentaires, variables, affectations etc.") ; finp() ; $sous = 0 ;
00040     
00041     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.2","Tests et Boucles") ; finp() ;
00042     
00043     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.3","Sous-programmes") ; finp() ;
00044     
00045     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.4","Objets") ; finp() ;
00046     
00047     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.5","Encodages") ; finp() ;
00048     
00049     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.6","Sessions") ; finp() ;
00050     
00051     
$sous
++ ; p() ; echo "&nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("#tth_sEc$sect.7","Documentation") ; finp() ;
00052     
00053     
00054     
######################################################################################################################################
00055     
00056     /* essayons d'automatiser un peut tout cela */
00057     
00058     
function
section($section,$sectClass="bouton_fin jaune_pastel nou") {
00059     
00060     
$GLOBALS
["sect"]++ ;
00061     
$GLOBALS
["sous"] = 0 ;
00062     
$sect
= $GLOBALS["sect"] ;
00063     
p() ;
00064      echo
"
$sect.&nbsp; ".href("#tth_sEc$sect.",snbsp().$section.snbsp(),$sectClass) ;
00065     
finp() ;
00066     
00067     }
# fin de fonction section
00068     
00069     ###-----------------------------------------------------------------------------------------------------------------------------------
00070     
00071     
function
sousSection($sousSection) {
00072     
00073     
$sect
= $GLOBALS["sect"] ;
00074     
$GLOBALS
["sous"]++ ;
00075     
$sous
= $GLOBALS["sous"] ;
00076     
p() ;
00077      echo
"&nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("#tth_sEc$sect.$sous",$sousSection) ;
00078     
finp() ;
00079     
00080     }
# fin de fonction sousSection
00081     
00082     ###-----------------------------------------------------------------------------------------------------------------------------------
00083     
00084     
function
sousSectionLien($lien,$sousSection,$finp="") {
00085     
00086     
$sect
= $GLOBALS["sect"] ;
00087     
$GLOBALS
["sous"]++ ;
00088     
$sous
= $GLOBALS["sous"] ;
00089     
p() ;
00090      echo
"&nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href($lien,$sousSection) ;
00091      echo
$finp ;
00092     
finp() ;
00093     
00094     }
# fin de fonction sousSection
00095     
00096     ######################################################################################################################################
00097     
00098     
00099     
section
("Programmation classique en $PHP") ;
00100     
00101     
sousSection
("Exemple 1 : un Bonjour complet") ;
00102     
00103     
sousSection
("Exemple 2 : Table de multiplication") ;
00104     
00105     
sousSection
("Exemple 3 : Calcul de moyennes de classe") ;
00106     
00107     
00108     
section
("Exemples sp&eacute;cifiques en $PHP") ;
00109     
00110     
sousSection
("Tableaux associatifs et Expressions r&eacute;guli&egrave;res") ;
00111     
00112     
sousSection
("Nombre de fichiers dans un r&eacute;pertoire") ;
00113     
00114     
sousSection
("Requ&#234;tes SQL dont SQLite et MySQL") ;
00115     
00116     
00117     
section
("Exemples plus techniques en $PHP") ;
00118     
00119     
sousSectionLien
("http://forge.info.univ-angers.fr/~gh/Wanalexies/f_dicos.php","Dictionnaires d'un fichier texte") ;
00120     
00121     
sousSectionLien
("http://forge.info.univ-angers.fr/~gh/Idas/Wcabiq/f_classif.php","Classification hi&eacute;rarchique de donn&eacute;es bact&eacute;riologiques") ;
00122     
00123     
sousSectionLien
("http://forge.info.univ-angers.fr/~gh/Idas/Wcabiq/f_identif.php","Identification automatique de vecteurs d'absence-pr&eacute;sence") ;
00124     
00125     
sousSectionLien
("http://forge.info.univ-angers.fr/~gh/jphistopct.php","Graphiques")." avec ".href("http://jpgraph.net/","jpgraph") ;
00126     
00127     
sousSectionLien
("http://forge.info.univ-angers.fr/~gh/frames/framesindex.php","Diaporamas en $PHP") ;
00128     
00129     
sousSectionLien
("../Leadb","Site LEADB (bioinformatique)") ;
00130     
00131     
sousSectionLien
("http://forge.info.univ-angers.fr/~gh/affichette.php","Production de pdf")." via LaTeX " ;
00132     
00133     
sousSectionLien
("http://forge.info.univ-angers.fr/~gh/Pagsd/lagrange3.php","Trac&eacute; de graphe math&eacute;matique")." via Dot " ;
00134     
00135     
# sousSectionLien("http://forge.info.univ-angers.fr/~gh/internet/chanteurs3.php","Interrogation dynamique de Google") ;
00136     
00137     
00138     
section
("En guise de conclusion sur $PHP","bouton_fin vert_pastel nou") ;
00139     
00140     
$sect
= 0 ;
00141     
00142     
#########################################################################################################################
00143     
00144     
$sect
++ ; h2(aname($sect.". Pr&eacute;sentation de $PHP","tth_sEc$sect.")) ; $sous = 0 ; # section 1
00145     
00146     #########################################################################################################################
00147     
00148     
blockquote
() ; # section
00149     
00150     
p
("texte") ;
00151     echo
b
("$PHP")." est un langage de programmation pour les serveurs Web, orient&eacute; base de donn&eacute;es. " ;
00152     echo
" Ce qui signifie qu'il permet de g&eacute;rer des pages "
.b("$HTML dynamiques")." sur le serveur et en particulier de " ;
00153     echo
" construire des pages Web correspondant &agrave; des r&eacute;sultats de requ&#234;tes sur des bases de donn&eacute;es de type " ;
00154     echo
b
("SQL").". " ;
00155     echo
" Selon ses auteurs, sa syntaxe est proche du C, de Java et \n" ;
00156     echo
" de
$Perl. " ;
00157     echo
b
("$PHP")." se compose d'un langage de programmation classique \n" ;
00158     echo
"(affectations, tests, boucles, fonctions...), de fonctions Web (y compris pour les protocoles, services et utilitaires \n" ;
00159     echo
" comme LDAP, POP3, PDF, ZIP...) \n" ;
00160     echo
" et de fonctions base de donn&eacute;es (SQLite,MySQL,PostgreSQL..). " ;
00161     
finp() ;
00162     
00163     
$sous
++ ; h3(aname("$sect.$sous Versions de $PHP","tth_sEc$sect.$sous")) ;
00164     
00165     
blockquote
() ; # sous-section
00166     
00167     
p
("texte") ;
00168     echo
" Nous d&eacute;crivons ici l'utilisation de la version 7 de
$PHP, \n" ;
00169     echo
" avec quelques compl&eacute;ments sur les versions plus anciennes (
$PHP 3, 4, 5). \n" ;
00170     echo
" comme par exemple pour la programmation objets apparue avec
$PHP4. \n" ;
00171     echo
" Ce tuteur est largement inspir&eacute; de la documentation officielle, \n" ;
00172     echo
" vous pouvez donc l'utiliser en 2020. \n" ;
00173     
finp() ;
00174     
00175     
p
("texte") ;
00176     echo
"
$PHP s'ex&eacute;cute sur le serveur et non pas sur le client (navigateur). C'est pourquoi on ne voit que \n" ;
00177     echo
" le r&eacute;sultat de l'ex&eacute;cution du programme
$PHP &agrave; l'aide d'un navigateur. \n" ;
00178     echo
" Suivant la configuration du serveur, une erreur
$PHP &agrave; l'ex&eacute;cution \n" ;
00179     echo
" affiche un message ou se contente de renvoyer une page vide. \n" ;
00180     echo
" On peut &eacute;crire une page Web avec n'importe quel &eacute;diteur de textes, sous Windows ou Linux, mais la coloration syntaxique est \n" ;
00181     echo
" certainement une caract&eacute;ristique minimale pour qu'un &eacute;diteur de textes soit acceptable pour
$PHP. Donc exit Notepad et vi, \n" ;
00182     echo
" et bienvenue &agrave; "
.b("Notepad++").", ".b("vim")." ".b("Microsoft Visual Code")." ou ".b("Geany")."... \n" ;
00183     
finp() ;
00184     
00185     
p
("texte") ;
00186     echo
" Une fois le programme &eacute;crit, il faut le transf&eacute;rer sur le serveur, dans un r&eacute;pertoire particulier, souvent "
.s_span("public_html","gvert")." \n" ;
00187     echo
" Pour la facult&eacute; des sciences d'Angers, ce r&eacute;pertoire est nomm&eacute; "
.s_span("forge_html","gvertf").". \n" ;
00188     
finp() ;
00189     
00190     
p
("texte") ;
00191     echo
" Si vous connaissez d&eacute;j&agrave;
$Perl, vous pouvez profiter du \n" ;
00192     echo
href
("http://www.cs.wcupa.edu/~rkline/perl2php/","tableau synoptique")." \n" ;
00193     echo
" des instructions
$Perl et $PHP. \n" ;
00194     
finp() ;
00195     
00196     
p
("texte") ;
00197     echo
"
$PHP est disponible sous Windows, sous MacOs et sous Unix. \n" ;
00198     echo
" Le site officiel est \n" ;
00199     
finp() ;
00200     
00201     
div
("center") ;
00202      echo
href
("http://www.php.net","http://www.php.net","gbleu nou") ;
00203     
findiv() ;
00204     
00205     
p
("texte") ;
00206     echo
"
$PHP est aussi \n" ;
00207     echo
" livr&eacute; en standard avec le serveur \n" ;
00208     echo
b
("Apache")." \n" ;
00209     echo
" et l'interpr&eacute;teur
$PHP dans des distributions \"LAMP\" comme ".href("http://www.easyphp.org/","EasyPHP").", \n" ;
00210     echo
" "
.href("http://www.wampserver.com/presentation.php","Wamp")." et \n" ;
00211     echo
" "
.href("http://www.apachefriends.org/en/xampp.html","Xampp").". \n" ;
00212     
finp() ;
00213     
00214     
finblockquote
() ; # sous-section
00215     
00216     
$sous
++ ; h3(aname("$sect.$sous Exemples de code $PHP","tth_sEc$sect.$sous")) ;
00217     
00218     
blockquote
() ; # sous-section
00219     
00220     
p
("texte") ;
00221     echo
" Pour utiliser
$PHP, une fois le logiciel install&eacute;, configur&eacute; \n" ;
00222     echo
" il suffit d'&eacute;crire des fichiers de type "
.s_span(".php","gvert")." plut&#244;t que ".b(".htm")." ou \n" ;
00223     echo
b
(".html")." \n" ;
00224     echo
" et le \n" ;
00225     echo
" tour est jou&eacute; (lire la "
.href("../internet/serveurs.php","note locale")." sur les serveurs angevins). \n" ;
00226     
finp() ;
00227     
00228     
p
("texte") ;
00229     echo
" L'appel &agrave;
$PHP est commenc&eacute; par le marqueur \n" ;
00230     echo
b
("&lt;?php") ;
00231     echo
" et se termine par le marqueur \n" ;
00232     echo
b
("?&#62;").". \n" ;
00233     
finp() ;
00234     
00235     
p
("texte") ;
00236     echo
" Il faut noter que dans la version 3 d&egrave;s le premier appel &agrave;
$PHP, \n" ;
00237     echo
" le serveur Web g&egrave;rait une \"session\" qui gardait en m&eacute;moire un certain nombre \n" ;
00238     echo
" d'informations, comme par exemple les variables
$PHP \n" ;
00239     echo
" mais ce n'est plus le cas depuis la version 4 et il faut donc faire un appel explicite &agrave; "
.b("start_session()")."... \n" ;
00240     
finp() ;
00241     
00242     
p
("texte") ;
00243     echo
" Le fichier suivant, nomm&eacute; "
.s_span("xmp01.php","gbleuf")." \n" ;
00244     
finp() ;
00245     
00246     
# un affichage peu maintenable ! le code ' pre_fichier("xmp01.php") ; ' serait plus "clean"
00247     
00248     
pre
("plusgros") ;
00249     echo
span
("gbleu") ;
00250     echo
" &lt;html&#62; \n" ;
00251     echo
" &lt;head&#62; \n" ;
00252     echo
" &lt;title&#62; (gH) : un premier exemple en
$PHP&lt;/title&#62; \n" ;
00253     echo
" &lt;/head&#62; \n" ;
00254     echo
" &lt;body&#62; \n" ;
00255     echo
" Bonjour, &lt;?php echo \" tout le monde \" ;?&#62; \n" ;
00256     echo
" &lt;/body&#62; \n" ;
00257     echo
" &lt;/html&#62; \n" ;
00258     
finspan() ;
00259     
finpre() ;
00260     
00261     
p
("texte") ;
00262     echo
" est une page Web qui utilise le mode normal pour afficher " ;
00263     echo
s_span
(" Bonjour ","gvert")." et qui " ;
00264     echo
" fait appel &agrave;
$PHP pour afficher " ;
00265     echo
s_span
(" tout le monde","gvert").". " ;
00266     
finp() ;
00267     
00268     
p
("texte") ;
00269     echo
b
("Attention&nbsp;:")." l'imbrication " ;
00270     echo
" des marqueurs Web classiques et ceux de " ;
00271     echo
"
$PHP n'a pas besoin d'&#234;tre &eacute;quilibr&eacute;e tant " ;
00272     echo
" que cela donne une page correcte, m&ecirc;me si ce n'est pas une pratique recommand&eacute;e." ;
00273     
finp() ;
00274     
00275     
p
("texte") ;
00276     echo
" Par exemple, le fichier "
.s_span("xmp02.php","gbleuf")." qui contient " ;
00277     
finp() ;
00278     
00279     
# un affichage plus raisonnable et un fichier testable
00280     
00281     
pre_fichier
("xmp02.php","cadre") ;
00282     
00283     
p
("texte") ;
00284     echo
" est syntaxiquement correct, alors que le marqueur "
.b("&lt;?php")." commence avant que le marqueur ".b("&lt;/ul&#62;")." termine " ;
00285     echo
" la liste (ce qui est normal, ici, puisque c'est
$PHP qui termine la liste). " ;
00286     echo
" Cette pratique, possible certes, n'est pas une bonne pratique. Il vaut mieux faire &eacute;crire &agrave;
$PHP " ;
00287     echo
"des fragments de code
$XHTML valides dits ".em("self contained").". " ;
00288     
finp() ;
00289     
00290     
p
("texte") ;
00291     echo
" On peut ouvrir et fermer
$PHP plusieurs fois dans une m&#234;me page, comme dans " ;
00292     
finp() ;
00293     
00294     
pre_fichier
("xmp03.php","cadre") ;
00295     
00296     
p
("texte") ;
00297     echo
" En termes de s&eacute;curit&eacute;,
$PHP est int&eacute;ressant car c'est le serveur qui interpr&egrave;te la page. " ;
00298     echo
" L'utilisateur ne voit que la page produite. Ainsi, la demande de l'affichage du texte source de la " ;
00299     echo
" page pr&eacute;c&eacute;dente donne " ;
00300     
finp() ;
00301     
00302     
pre_fichier
("xmp03.html","cadrebleu") ;
00303     
00304     
p
("texte") ;
00305     echo
" comme si toute le texte avait &eacute;t&eacute; &eacute;crit \"normalement\". " ;
00306     
finp() ;
00307     
00308     
finblockquote
() ; # sous-section
00309     
00310     
finblockquote
() ; # section
00311     
00312     #########################################################################################################################
00313     
00314     
$sect
++ ; h2(aname($sect.". El&eacute;ments du langage de $PHP","tth_sEc$sect.")) ; $sous = 0 ; # section 2
00315     
00316     #########################################################################################################################
00317     
00318     
blockquote
() ; # section
00319     
00320     
$sous
++ ; h3(aname("$sect.$sous Commentaires, variables, affectations etc.","tth_sEc$sect.$sous")) ;
00321     
00322     
blockquote
() ; # sous-section
00323     
00324     
p
("texte") ;
00325     echo
" Un commentaire peut &#234;tre d&eacute;limit&eacute; par "
.ghBleu('/'.'*') ;
00326     echo
" et "
.ghBleu('*'.'/') ;
00327     echo
" ou suivre le symbole "
.ghBleu('#') ;
00328     echo
" ou le symbole double "
.ghBleu('//').". " ;
00329     echo
" L'int&eacute;r&ecirc;t d'avoir plusieurs jeux de commentaires est de pouvoir commenter &agrave; diff&eacute;rents " ;
00330     echo
" niveaux (titres, commentaires d'explication, petits commentaires brefs de structure...). " ;
00331     
finp() ;
00332     
00333     
p
("texte") ;
00334     echo
" Une variable est rep&eacute;r&eacute;e par le symbole "
.ghBleu('$')." et l'affectation se " ;
00335     echo
' fait avec '
.ghBleu("=").'. ' ;
00336     echo
' Par exemple '
.ghBleu('$jmois = 0 ;').' met la valeur 0 ' ;
00337     echo
' dans la variable '
.ghBleu('jmois').'. ' ;
00338     echo
"
$PHP n'est pas typ&eacute; explicitement, ce qui signifie qu'on n'a " ;
00339     echo
" pas besoin de pr&eacute;ciser le type d'une variable. En interne,
$PHP " ;
00340     echo
' utilise les types ' ;
00341     echo
b
("integer").', ' ;
00342     echo
b
("float").', ' ;
00343     echo
b
("string").', ' ;
00344     echo
b
("array").' et ' ;
00345     echo
b
("object").'. ' ;
00346     
finp() ;
00347     
00348     
p
("texte") ;
00349     echo
" Les variables chaines de caract&egrave;res utilisent les deux jeux de d&eacute;limiteurs " ;
00350     echo
b
("'")." et " ;
00351     echo
b
('"')." ainsi que les s&eacute;quences escape comme ".b("\\n"), b('\$')."..." ;
00352     echo
" Lorsque le d&eacute;limiteur "
.b('"')." est utilis&eacute;, les variables &agrave; l'int&eacute;rieur de la chaine " ;
00353     echo
" sont "
.em("interpol&eacute;es").", c'est &agrave; dire remplac&eacute;es par leur contenu. Voici un exemple&nbsp; " ;
00354     
finp() ;
00355     
00356     
blockquote() ;
00357     
table() ;
00358     
tr() ;
00359     
td
() ; echo ghBleu(' $i = 2 ; ') ; fintd() ;
00360     
fintr() ;
00361     
tr() ;
00362     
td
() ; echo ghBleu(' echo " \$i vaut $i " ;"') ; fintd() ;
00363     
td
() ; echo ghVert(' # affiche $i vaut 2"') ; fintd() ;
00364     
fintr() ;
00365     
tr() ;
00366     
td
() ; echo ghBleu(' echo " \\\$i vaut \$i " ;"') ; fintd() ;
00367     
td
() ; echo ghVert(' # affiche \$i vaut $i"') ; fintd() ;
00368     
fintr() ;
00369     
fintable() ;
00370     
finblockquote() ;
00371     
00372     
p
("texte") ;
00373     echo
" Les instructions
$PHP doivent &#234;tre termin&eacute;es par des points-virgules. " ;
00374     echo
" Les d&eacute;finitions de fonction et de classes d'objets ne sont pas des instructions mais des d&eacute;clarations. " ;
00375     echo
" Elles ne doivent pas &#234;tre termin&eacute;es par des points-virgules (en mettre ne constitue pas toujours une erreur)." ;
00376     
finp() ;
00377     
00378     
p
("texte") ;
00379     echo
" Un tableau en
$PHP est une variable qui utilise des crochets avec une valeur (indice) entre les " ;
00380     echo
" crochets. L'indice peut &#234;tre quelconque, ce qui fournit &agrave; la fois les tableaux classiques " ;
00381     echo
" (indice num&eacute;rique) et les "
.em(b("hashs"))." ou ".em(b("tableaux associatifs"))." (indices chaine de caract&egrave;res). Ainsi " ;
00382     echo
ghBleu
('$age["Pierre"] = 12 ;')." met 12 dans le tableau ".b("age") ;
00383     echo
" &agrave; l'indice "
.b("Pierre").". " ;
00384     echo
" La syntaxe explicite \"moderne\" "
.ghBleu('$t = [1,5,12] ; ')." est aussi accept&eacute;e en $PHP7. " ;
00385     
finp() ;
00386     
00387     
p
("texte") ;
00388     echo
" La fonction "
.ghBleu(b("count()"))." renvoie le nombre d'&eacute;l&eacute;ments dans le " ;
00389     echo
" tableau et on acc&egrave;de aux diff&eacute;rents &eacute;l&eacute;ments du tableau avec "
.ghBleu(b("each()"));
00390     echo
" ou &agrave; partir de "
.ghBleu(b("next()"))." et de ".ghBleu(b("prev()")).". " ;
00391     echo
" Les tableaux peuvent &#234;tre tri&eacute;s avec " ;
00392     echo
ghBleu
(b("sort()")).", " ;
00393     echo
ghBleu
(b("asort()")).", " ;
00394     echo
ghBleu
(b("arsort()")).", " ;
00395     echo
ghBleu
(b("ksort()"))."... " ;
00396     
finp() ;
00397     
00398     
p
("texte") ;
00399     echo
" Certains tableaux sont cr&eacute;&eacute;s dynamiquement. Ainsi " ;
00400     echo
ghBleu
("explode(char,chaine)")." renvoie un tableau o&#249; chaque &eacute;l&eacute;ment correspondant au d&eacute;coupage de " ;
00401     echo
" la chaine, "
.b("char")." &eacute;tant le s&eacute;parateur. Par exemple " ;
00402     
finp() ;
00403     
00404     
div
("center") ;
00405     
p
("texte") ;
00406     echo
ghBleu
('explode(" ; "," il pleut ; je mange ; tu dors " ) ; ') ;
00407     
finp() ;
00408     
findiv() ;
00409     
00410     
p
("texte") ;
00411     echo
" renvoie un tableau a trois &eacute;l&eacute;ments " ;
00412     echo
" dont le premier (situ&eacute; &agrave; l'indice z&eacute;ro) est "
.b("il pleut").". " ;
00413     echo
" Si on utilise plus d'un indice, on met des crochets autour de chaque indice. Ainsi l'&eacute;l&eacute;ment matriciel traditionnel " ;
00414     echo
" M"
.sub("i,j")." d'une matrice se note ".ghBleu('$M[$i][$j]') ;
00415     echo
"en
$PHP. " ;
00416     
finp() ;
00417     
00418     
p
("texte") ;
00419     echo
" La fonction "
.b("print_r")." permet d'afficher proprement et rapidement tout le contenu d'un objet ou d'un tableau." ;
00420     
finp() ;
00421     
00422     
p
("texte") ;
00423     echo
" Pour mettre le contenu d'un champ issu d'un formulaire dans une variable, " ;
00424     echo
" il faut passer par le \""
.href("https://www.php.net/manual/fr/language.variables.superglobals.php","super-tableau")."\" ".b("_GET").". " ;
00425     echo
" Par exemple avec le code
$HTML suivant, pour r&eacute;cup&eacute;rer la valeur de l'age, " ;
00426     
finp() ;
00427     
00428     
pre
("gbleu plusgros") ;
00429     echo
' &lt;form action=... method="get"&#62; '
."\n" ;
00430     echo
' Id : &lt;input type="text" name="age" /&#62;&lt;br&#62;'
."\n" ;
00431     echo
' &lt;input type="submit" value="envoi" /&#62; '
."\n" ;
00432     echo
' &lt;/form&#62; '
."\n" ;
00433     
finpre() ;
00434     
00435     
p
("texte") ;
00436     echo
" il faut &eacute;crire " ;
00437     
finp() ;
00438     
00439     
pre
("gbleu") ;
00440     echo
' $x = $_GET["age"] ; ' ;
00441     
finpre() ;
00442     
00443     
p
("texte") ;
00444     echo
" mais il serait sans doute plus correct de nommer "
.b("age")." la variable associ&eacute;e, soit le code : " ;
00445     echo
ghBleu
('$age = $_GET["age"] ;').". On notera que la fonction " ;
00446     echo
b
("isset()")." permet de tester s'il y a quelquechose au bon indice dans le tableau ".b("_GET") ;
00447     echo
" et que pour la m&eacute;thode "
.b("POST").", le super-tableau est nomm&eacute; ".b("_POST").". " ;
00448     
finp() ;
00449     
00450     
p
("texte") ;
00451     echo
" Enfin, les variables d'environnement sont consid&eacute;r&eacute;es comme des variables
$PHP normales, " ;
00452     echo
" m&#234;me si la fonction "
.ghBleu("getenv()")." donne acc&egrave;s aux variables syst&egrave;mes. " ;
00453     
finp() ;
00454     
00455     
p
("texte") ;
00456     echo
" Lors de l'affectation,
$PHP permet de nombreux raccourcis ".em(b("&agrave; la C")).", comme " ;
00457     
finp() ;
00458     
00459     
pre
("gbleu plusgros") ;
00460      echo
ghBleu
('$a = ++$b = $c; ') ;
00461     
finpre() ;
00462     
00463     
p
("texte") ;
00464     echo
" ce que nous ne conseillons pas pour des questions de lisibilit&eacute;. " ;
00465     
finp() ;
00466     
00467     
p
("texte") ;
00468     echo
" L'op&eacute;rateur "
.ghBleu(b("%")) ;
00469     echo
" renvoie le reste de la division enti&egrave;re (ou "
.em("modulo")."). " ;
00470     echo
" La concat&eacute;nation de chaine se fait avec un point et " ;
00471     echo
ghBleu
(b('$a&nbsp;=&nbsp;$a&nbsp;.&nbsp;$b'))." peut se raccourcir en ".ghBleu(b('$a&nbsp;.=&nbsp;&nbsp;$b')).". " ;
00472     echo
" Les op&eacute;rateurs logiques ont les \"doux\" noms " ;
00473     echo
ghBleu
(b("and"))." , " ;
00474     echo
ghBleu
(b("or"))." , " ;
00475     echo
ghBleu
(b("xor"))." , " ;
00476     echo
ghBleu
(b("!"))." (not) et les op&eacute;rateurs de comparaison sont standards&nbsp;: " ;
00477     echo
ghBleu
(b("=="))." , " ;
00478     echo
ghBleu
(b("&lt;="))." , " ;
00479     echo
ghBleu
(b("&#62;="))." . " ;
00480     
finp() ;
00481     
00482     
p
("texte") ;
00483     echo
" Pour les habitu&eacute;s au C et &agrave;
$Perl, il est possible d'utiliser la construction " ;
00484     echo
ghBleu
(b('$a ? $b : $c ;')) ;
00485     echo
" comme raccourci pour l'affection classique "
.ghBleu(b('if $a then $b else $c')).", " ;
00486     echo
" ce que nous ne conseillons pas non plus pour des questions de lisibilit&eacute;. " ;
00487     
finp() ;
00488     
00489     
finblockquote
() ; # sous-section
00490     
00491     
div
("cadre") ;
00492     
blockquote
() ; # division
00493     
p() ;
00494     echo
" Vous trouverez &agrave; l'adresse "
.href("../internet/montresource.php?nomfic=l2aprog01.php","prog01","bouton_fin vert_pastel nou") ;
00495     echo
" de nombreux exemples d'affectations et des compl&eacute;ments sur les variables. " ;
00496     
finp() ;
00497     
finblockquote
() ; # division
00498     
findiv() ;
00499     
00500     
$sous
++ ; h3(aname("$sect.$sous Tests et Boucles","tth_sEc$sect.$sous")) ;
00501     
00502     
blockquote
() ; # sous-section
00503     
00504     
p
("texte") ;
00505     echo
" Le test en "
.b("SI")." se fait avec ".ghBleu("if (condition) { ... }").". On peut utiliser " ;
00506     echo
ghBleu
("else")." pour l'alternative inverse et " ;
00507     echo
ghBleu
("elseif") ." pour des alternatives multiples. " ;
00508     echo
" L'instruction "
.ghBleu("switch")." est &eacute;galement disponible pour les structures de cas g&eacute;n&eacute;rales. " ;
00509     echo
b
(" Attention&nbsp;: ")." les parenth&egrave;ses sont obligatoires pour les conditions. " ;
00510     
finp() ;
00511     
00512     
p
("texte") ;
00513     echo
" La boucle "
.b("TANT QUE")." utilise ".ghBleu("while (condition) { ... }")." . " ;
00514     echo
" La forme "
.ghBleu("do {...} while (condition)")." r&eacute;alise la boucle ".b("r&eacute;p&eacute;ter... jusqu'&agrave;")." puisqu'elle " ;
00515     echo
" effectue le test en fin de boucle. " ;
00516     
finp() ;
00517     
00518     
p
("texte") ;
00519     echo
" La boucle pour classique en
$PHP " ;
00520     echo
" est "
.ghBleu("for (debut;fin;increment) { ...}") ;
00521     echo
" mais il existe aussi une boucle "
.b("foreach").". " ;
00522     
finp() ;
00523     
00524     
p
("texte") ;
00525     echo
" Une bonne habitude &agrave; prendre est de consulter le manuel de
$PHP (".href("http://php.net","php.net")." pour avoir le d&eacute;tail " ;
00526     echo
" des instructions et fonctions
$PHP. On y trouve aussi des exemples de script, comme pour la page sur " ;
00527     echo
href
("http://php.net/manual/fr/control-structures.foreach.php","foreach").". " ;
00528     
finp() ;
00529     
00530     
finblockquote
() ; # sous-section
00531     
00532     
div
("cadre") ;
00533     
blockquote
() ; # division
00534     
p() ;
00535     echo
" Vous trouverez &agrave; l'adresse "
.href("../internet/montresource.php?nomfic=l2aprog02.php","prog02","bouton_fin vert_pastel nou") ;
00536     echo
" de nombreux exemples sur les tests et les boucles. " ;
00537     
finp() ;
00538     
finblockquote
() ; # division
00539     
findiv() ;
00540     
00541     
$sous
++ ; h3(aname("$sect.$sous Sous-programmes","tth_sEc$sect.$sous")) ;
00542     
00543     
blockquote
() ; # sous-section
00544     
00545     
p
("texte") ;
00546     echo
" Un sous-programme en
$PHP est forc&eacute;ment une fonction, d&eacute;clar&eacute;e par " ;
00547     echo
ghBleu
(b("function Nom (liste d'Arguments) { ... ; } ")).". " ;
00548     
finp() ;
00549     
00550     
p
("texte") ;
00551     echo
" La valeur renvoy&eacute;e &eacute;ventuellement doit &#234;tre sp&eacute;cifi&eacute;e par "
.ghBleu(b("return")).". Pour envoyer plus d'une valeur, " ;
00552     echo
" il faut soit convertir le tout en chaine de caract&egrave;res (\"s&eacute;rialiser\"), soit renvoyer un " ;
00553     echo
" tableau explicite comme dans "
.ghBleu(b("return array(\$i, \$j)")).". " ;
00554     
finp() ;
00555     
00556     
p
("texte") ;
00557     echo
" Les arguments d'une fonction sont obligatoires sauf s'ils ont une valeur par d&eacute;faut. Le passage par r&eacute;f&eacute;rence plut&#244;t que par valeur se fait en " ;
00558     echo
" rajoutant "
.ghBleu(b("&amp;"))." soit dans l'en-t&#234;te de la fonction soit au moment de l'appel. Si l'argument est suivi " ;
00559     echo
" de "
.ghBleu(b("= valeur")).", il s'agit d'un param&egrave;tre facultatif et ce qui suit le symbole &eacute;gal sera pris comme valeur par d&eacute;faut. " ;
00560     echo
" Si on met le symbole "
.ghBleu("@")." devant le nom d'une fonction, le message d'erreur &eacute;ventuel (en cas d'erreur) n'est pas affich&eacute;. " ;
00561     
finp() ;
00562     
00563     
p() ;
00564     echo
" Vous trouverez &agrave; l'adresse "
.href("../internet/montresource.php?nomfic=l2aprog03.php","prog03","bouton_fin vert_pastel nou") ;
00565     echo
" de nombreux exemples sur les tableaux et les d&eacute;finitions de fonctions. " ;
00566     
finp() ;
00567     
00568     
finblockquote
() ; # sous-section
00569     
00570     
$sous
++ ; h3(aname("$sect.$sous Objets","tth_sEc$sect.$sous")) ;
00571     
00572     
blockquote
() ; # sous-section
00573     
00574     
p
("texte") ; ;
00575     echo
" Les objets en
$PHP, disponibles depuis $PHP4, utilisent le paradigme de " ;
00576     echo
href
("http://hachesse.developpez.com/objetphp/","classe").", comme C et Java (et non pas de le paradigme " ;
00577     echo
" de "
.href("https://developer.mozilla.org/fr/docs/Learn/JavaScript/Objects/Prototypes_Objet","prototype") ;
00578     echo
" comme le fait Javascript). S'il y n'a pas de typage explicite, il y a d&eacute;claration des donn&eacute;es (ou attributs, " ;
00579     echo
" propri&eacute;t&eacute;s) avec le mot-cl&eacute; "
.b("var")." et d&eacute;claration des m&eacute;thodes (ou fonctions propres) via le mot-cl&eacute; ".b("function").". " ;
00580     echo
" Les constructeurs ("
.b("new")."), instanciations et autres manipulations sont donc \"classiques\". " ;
00581     echo
" Voici un exemple de programmation objet en
$PHP7&nbsp;: " ;
00582     
finp() ;
00583     
00584     
pre_fichier
("objets_php7.php","cadre") ;
00585     
00586     
p();
00587     echo
" R&eacute;sultat de son ex&eacute;cution en ligne de commandes&nbsp;:" ;
00588     
finp() ;
00589     
00590     
pre_fichier
("objets_php7.txt","cadrejaune") ;
00591     
00592     
p
("texte") ; ;
00593     echo
" Depuis
$PHP5, le mod&egrave;le objet a &eacute;t&eacute; revu et compl&eacute;t&eacute;. Les donn&eacute;es (ou attributs) et les fonctions (ou m&eacute;thodes) " ;
00594     echo
" peuvent &ecirc;tre d&eacute;clar&eacute;es "
.b("public").", ".b("private")." ou ".b("protected").". Les constructeurs et destructeurs " ;
00595     echo
" utilisent les noms explicites "
.b("__construct")." (au lieu du nom de classe en $PHP4) et ".b("__destruct").". " ;
00596     echo
" Le manuel officiel de
$PHP, nomm&eacute; ".href("http://www.php.net/manual/fr/language.oop5.php","oop5")." est assez d&eacute;taill&eacute; pour les objets. " ;
00597     echo
" De plus on trouve de nombreux documents sur le Web qui d&eacute;taille les objets en
$PHP, comme " ;
00598     echo
href
("http://fr.wikibooks.org/wiki/Programmation_PHP/La_programmation_orient%C3%A9e_objet","ce wikibook").", " ;
00599     echo
" les "
.href("http://classes.soe.ucsc.edu/cmps183/Spring06/lectures/OO%20Programming%20in%20PHP.pdf","transparents de M. Slater") ;
00600     echo
"("
.href("slater.pdf","version locale").", " ;
00601     echo
" les "
.href("http://somabo.de/talks/200703_montreal_oop.pdf","transparents de 2007-Montreal") ;
00602     echo
"("
.href("montreal_oop.pdf","version locale").", " ;
00603     echo
" ou d'autres livres trouv&eacute;s avec Google si on cherche " ;
00604     echo
href
("http://www.google.fr/search?q=php%20oo%20programming%20filetype:pdf","php oo programming filetype:pdf").". " ;
00605     
finp() ;
00606     
00607     
p
("texte") ;
00608     echo
" Une pr&eacute;sentation courte de la couche objet et au passage des m&eacute;thodes \"magiques\" se trouve dans le " ;
00609     echo
" cours "
.href("crs_php_objets.pdf","php-objets")." de notre coll&egrave;gue David LESAINT que nous remercions ici pour ce document. " ;
00610     
finp() ;
00611     
00612     
finblockquote
() ; # sous-section
00613     
00614     
$sous
++ ; h3(aname("$sect.$sous Encodages","tth_sEc$sect.$sous")) ;
00615     
00616     
blockquote
() ; # sous-section
00617     
00618     
p
("texte") ;
00619     echo
" Lorsqu'un navigateur demande une page &agrave; un serveur, celui-ci envoie une ent&ecirc;te ou "
.b("header")." qui peut contenir une d&eacute;claration d'encodage. " ;
00620     echo
" Il peut alors y avoir conflit avec l'indication d'encodage ("
.b("charset").") fourni dans l'attribut content de l'&eacute;l&eacute;ment meta. Pour &eacute;viter cela, il est " ;
00621     echo
" possible d'utiliser l'instruction "
.href("http://php.net/manual/fr/function.header.php","header")." de $PHP, sans doute comme premi&egrave;re instruction. " ;
00622     echo
" Vous pouvez consulter nos deux programmes " ;
00623     echo
href
("../internet/forceiso.php","forceiso") ;
00624     echo
" et " ;
00625     echo
href
("../internet/forceutf.php","forceutf") ;
00626     echo
" pour v&eacute;rifier que m&ecirc;me le titre est accentu&eacute;, en "
.b("UTF")." comme en ".b("ISO8859").". Les codes-sources sont respectivement " ;
00627     echo
href
("../internet/montresource.php?nomfic=forceiso.php","source forceiso") ;
00628     echo
" et " ;
00629     echo
href
("../internet/montresource.php?nomfic=forceutf.php","source forceutf").". " ;
00630     echo
" Pour ce dernier fichier, vous devriez voir dans le code-source des caract&egrave;res bizarres comme "
.b("ĂŠ")." au lieu de ".b("&eacute;")." car c'est de l'UTF. " ;
00631     
finp() ;
00632     
00633     
p
("texte") ;
00634     echo
b
("Remarque&nbsp;: ")."il faut bien s&ucirc;r s'assurer que l'&eacute;diteur de textes que l'on utilise code bien les caract&egrave;res avec le \"bon\" encodage car une " ;
00635     echo
" page Web ne peut s'afficher correctement que si les 3 informations suivantes sont coh&eacute;rentes (4 si on compte l' "
.b("encoding")." en cas de " ;
00636     echo
" d&eacute;claration
$XML)&nbsp;: " ;
00637     
finp() ;
00638     
00639     
ol() ;
00640     
li
("l'encodage indiqu&eacute; par le header&nbsp;;") ;
00641     
li
("l'encodage indiqu&eacute; dans l'&eacute;l&eacute;ment meta&nbsp;;") ;
00642     
li
("l'encodage utilis&eacute; par l'&eacute;diteur de textes.") ;
00643     
finol() ;
00644     
00645     
p
("texte") ;
00646     echo
" Nous fournissons dans la petite biblioth&egrave;que de fonctions
$PHP dites " ;
00647     echo
b
(href("../internet/php_conceptuel.php","conceptuelles")) ;
00648     echo
" accessibles via "
.href("../internet/stdphp.php","std.php") ;
00649     echo
" une solution \"propre\" comme celle nomm&eacute;e "
.b("debutPage()")." pour assurer cette coh&eacute;rence d'encodage. " ;
00650     
finp() ;
00651     
00652     
finblockquote
() ; # sous-section
00653     
00654     
$sous
++ ; h3(aname("$sect.$sous Sessions","tth_sEc$sect.$sous")) ;
00655     
00656     
blockquote
() ; # sous-section
00657     
00658     
p
("texte") ;
00659     echo
" Le protocole "
.b("HTTP")." est un protocole sans m&eacute;moire. Ceci signifie que si vous demandez la page Web ".b("a.php")." il va y avoir ex&eacute;cution du programme " ;
00660     echo
" correspondant sur le serveur, avec ses variables et ses affichages &eacute;ventuels, mais qu'&agrave; la fin du programme, toutes les variables de ce programme disparaissent et " ;
00661     echo
" que d&egrave;s lors "
.b("HTTP")." ne se \"souvient plus\" de ce qu'il y avait comme variables. Pourtant, dans certains cas, on aimerait conserver une trace de ce qui a &eacute;t&eacute; d&eacute;fini ou " ;
00662     echo
" choisi, comme dans le cas du \"panier\" lors d'achats sur internet. Pour conserver des variables et leur valeur d'une page &agrave; l'autre,
$PHP fournit la " ;
00663     echo
" notion de "
.b(em("session")).", assez bien expliqu&eacute;e dans le manuel $PHP &agrave; la rubrique ".href("http://www.php.net/manual/fr/book.session.php","book.session").". " ;
00664     echo
" En deux mots&nbsp;: d&egrave;s le d&eacute;but de la page on &eacute;crit "
.b("session_start()&nbsp;;")." et ensuite on peut utiliser le &laquo;super tableau&raquo; nomm&eacute; " ;
00665     echo
" "
.b("\$_SESSION").". Pour y stocker des objets, il faut sans doute les convertir en une repr&eacute;sentation caract&egrave;re adapt&eacute;e " ;
00666     echo
" avec "
.href("http://php.net/manual/fr/function.serialize.php","serialize()").". " ;
00667     
finp() ;
00668     
00669     
finblockquote
() ; # sous-section
00670     
00671     
$sous
++ ; h3(aname("$sect.$sous Documentation","tth_sEc$sect.$sous")) ;
00672     
00673     
blockquote
() ; # sous-section
00674     
00675     
p
("texte") ;
00676     echo
" M&ecirc;me si
$PHP n'est pas typ&eacute; explicitement, $PHP a des fonctions sp&eacute;cialis&eacute;es pour chaque type de variable. " ;
00677     echo
" Par exemple, pour les tableaux il y a count(), sort()&nbsp; pour les chaines de caract&egrave;res, il y a " ;
00678     echo
" strlen(), strtoupper()... Pour chaque rubrique d'utilisation des fonctions, et pour chaque type, il y a " ;
00679     echo
" des dizaines de fonctions. Il est important de parcourir le manuel
$PHP pour &eacute;viter de mal reprogrammer " ;
00680     echo
" une fonction d&eacute;j&agrave; existante. Vous pouvez utiliser le tableau suivant tant que vous n'&ecirc;tes pas " ;
00681     echo
" familiaris&eacute; avec le "
.href("http://www.php.net/manual/fr/index.php","manuel").". " ;
00682     
finp() ;
00683     
00684     
blockquote() ;
00685     
blockquote() ;
00686     
table
(1,20,"collapse") ;
00687     
tr() ;
00688     
td
("C","orange_pastel") ; echo b(href("http://www.php.net/manual/fr/funcref.php" ,"index des rubriques","nou")) ; fintd() ;
00689     
td
("C","vert_pastel") ; echo b(href("http://www.php.net/manual/fr/book.strings.php" ,"chaines de caract&egrave;res","nou")) ; fintd() ;
00690     
td
("C","orange_pastel") ; echo b(href("http://www.php.net/manual/fr/book.array.php" ,"tableaux","nou")) ; fintd() ;
00691     
fintr() ;
00692     
tr() ;
00693     
td
("C","vert_pastel") ; echo b(href("http://www.php.net/manual/fr/book.pcre.php" ,"expressions r&eacute;guli&egrave;res","vert_pastel nou")) ; fintd() ;
00694     
td
("C","orange_pastel") ; echo b(href("http://php.net/manual/fr/language.oop5.php" ,"objets","orange_pastel nou")) ; fintd() ;
00695     
td
("C","vert_pastel") ; echo b(href("http://www.php.net/manual/fr/book.filesystem.php" ,"fichiers et OS","vert_pastel nou")) ; fintd() ;
00696     
fintr() ;
00697     
fintable() ;
00698     
finblockquote() ;
00699     
finblockquote() ;
00700     
00701     
p
("texte") ;
00702     echo
" Il serait illusoire de vouloir apprendre ou maitriser "
.b("rapidement")." $PHP de par la profusion de ces fonctions&nbsp;: il y en " ;
00703     echo
" a en gros plus de 3&nbsp;000 dans le \"coeur\" de
$PHP. Et avec des noms parfois incoh&eacute;rents, des syntaxes pas toujours standard... " ;
00704     echo
" C'est pourquoi nous conseillons d'utiliser des &eacute;diteurs \"&eacute;volu&eacute;s\" pour &eacute;crire du
$PHP, comme " ;
00705     echo
href
("http://www.geany.org/","Geany")." qui est capable d'afficher la liste des fonctions $PHP d&egrave;s qu'on en saisit les premi&egrave;res lettres... " ;
00706     
finp() ;
00707     
00708     
p
("texte") ;
00709     echo
" Si
$PHP affiche des pages Web via ".b("$HTML").", il est &eacute;galement capable de produire du ".b("PDF")." via des " ;
00710     echo
href
("http://ourcodeworld.com/articles/read/226/top-5-best-open-source-pdf-generation-libraries-for-php","biblioth&egrave;ques de fonctions d&eacute;di&eacute;es").". " ;
00711     
finp() ;
00712     
00713     
finblockquote
() ; # sous-section
00714     
00715     
finblockquote
() ; # section
00716     
00717     #########################################################################################################################
00718     
00719     
$sect
++ ; h2(aname($sect.". Programmation classique en $PHP","tth_sEc$sect.")) ; $sous = 0 ; # section 3
00720     
00721     #########################################################################################################################
00722     
00723     
blockquote
() ; # section
00724     
00725     
$sous
++ ; h3(aname("$sect.$sous Exemple 1 : un bonjour complet","tth_sEc$sect.$sous")) ;
00726     
00727     
blockquote
() ; # sous-section
00728     
00729     
p
("texte") ;
00730     echo
" Rappelons que ce premier programme doit afficher le mot \"Bonjour\" puis demander &agrave; l'utilisateur " ;
00731     echo
" son pr&eacute;nom et lui dire au revoir, en affichant la date, l'heure et le pr&eacute;nom en majuscules. " ;
00732     
finp() ;
00733     
00734     
p
("texte") ;
00735     echo
" L'affichage du mot Bonjour et la saisie du pr&eacute;nom ne rel&egrave;vent pas vraiment de
$PHP, " ;
00736     echo
" c'est le r&#244;le d'un formulaire "
.b("$HTML").". Une version minimale pour cette saisie est " ;
00737     
finp() ;
00738     
00739     
pre_fichier
("bonjour_f.htm","cadrejaune") ;
00740     
00741     
p
("texte") ;
00742     echo
" Lorsque l'utilisateur clique sur le bouton \"envoi&nbsp;!\", la machine transmet l'URL " ;
00743     echo
b
(" http://.../bonjour.php?prenom=XXX") ;
00744     echo
" o&#249; "
.b("XXX")." correspond au texte entr&eacute; dans le champ " ;
00745     echo
" du pr&eacute;nom (ou "
.b("http://.../bonjour.php?prenom=")." si le champ est vide). " ;
00746     echo
" Signalons qu'il est d'ailleurs possible d'entrer directement cette URL \"&agrave; la main\" dans le navigateur, ce qui permet de " ;
00747     echo
" tester le programme m&#234;me sans formulaire, possibilit&eacute; que nous exploiterons avec le prochain exemple. " ;
00748     
finp() ;
00749     
00750     
p
("texte") ;
00751     echo
" Un programme
$PHP de r&eacute;ponse minimal est " ;
00752     
finp() ;
00753     
00754     
pre_fichier
("bonjour.php","cadrejaune") ;
00755     
00756     
p
("texte") ;
00757     echo
" Mais on pr&eacute;f&eacute;rera sans doute une version plus habill&eacute;e, avec des styles "
.b("CSS").", " ;
00758     echo
" ce qui est plus du ressort d'"
.b("$HTML")." que de $PHP. " ;
00759     
finp() ;
00760     
00761     
p() ;
00762     echo
" Vous pouvez tester "
.href("pgenphp3.htm","ici")." ce programme. " ;
00763     
finp() ;
00764     
00765     
finblockquote
() ; # sous-section
00766     
00767     
$sous
++ ; h3(aname("$sect.$sous Exemple 2 : Table de multiplication","tth_sEc$sect.$sous")) ;
00768     
00769     
blockquote
() ; # sous-section
00770     
00771     
p
("texte") ;
00772     echo
" D'habitude, le programme table de multiplication vient demander un nombre (ou utiliser la valeur " ;
00773     echo
" pass&eacute;e en param&egrave;tre). Ici nous ne ferons pas de formulaire, car nous utiliserons la valeur " ;
00774     echo
" pass&eacute;e sur la ligne de l'URL (avec un rappel du passage de param&egrave;tre si l'URL est entr&eacute;e " ;
00775     echo
" telle quelle). " ;
00776     
finp() ;
00777     
00778     
pre_fichier
("tdm.php","cadrejaune") ;
00779     
00780     
p
("texte") ;
00781     echo
" Il est possible de passer plusieurs param&egrave;tres, par exemple pour g&eacute;rer la largeur de " ;
00782     echo
" l'affichage. Le passage de param&egrave;tres, commenc&eacute; par le symbole " ;
00783     echo
b
("?")." avec un couple ".b("variable=valeur")." se prolonge par le symbole " ;
00784     echo
b
("&amp;")." suivi d'un autre couple ".b("variable=valeur").". " ;
00785     echo
" C'est ce qui est rappel&eacute; dans la fonction aide(). " ;
00786     echo
" Nous profitons alors du passage de param&egrave;tre par d&eacute;faut de
$PHP dans l'appel de la fonction tdm() " ;
00787     echo
" dans cette deuxi&egrave;me version&nbsp;:" ;
00788     
finp() ;
00789     
00790     
pre_fichier
("tdmv2.php","cadrejaune") ;
00791     
00792     
p() ;
00793     echo
" Vous pouvez tester "
.href("pgenphp3.htm","ici")." ce programme. " ;
00794     
finp() ;
00795     
00796     
finblockquote
() ; # sous-section
00797     
00798     
$sous
++ ; h3(aname("$sect.$sous Exemple 3 : Calcul de moyennes de classe","tth_sEc$sect.$sous")) ;
00799     
00800     
blockquote
() ; # sous-section
00801     
00802     
p
("texte") ;
00803     echo
" Il s'agit ici de calculer la moyenne de notes lues dans un fichier. Nous allons en fait proposer " ;
00804     echo
" soit d'entrer les noms et notes dans une zone texte soit d'envoyer le fichier. Nous n'utiliserons " ;
00805     echo
" qu'un seul fichier nomm&eacute; "
.href("montresource.php?nomfic=moyenne.php","moyenne.php")." qui s'appellera lui-m&#234;me avec divers param&egrave;tres. " ;
00806     echo
" Le programme principal vient seulement choisir le sous-programme &agrave; ex&eacute;cuter en " ;
00807     echo
" fonction du param&eacute;tre "
.b("mode").", soit le texte&nbsp;: " ;
00808     
finp() ;
00809     
00810     
pre_fichier
("classev1.php","cadrejaune") ;
00811     
00812     
p
("texte") ;
00813     echo
" La saisie est un simple formulaire qui vient relancer le script "
.b("moyenne.php") ;
00814     echo
" avec la bonne valeur pour le param&egrave;tre mode, soit&nbsp;: " ;
00815     
finp() ;
00816     
00817     
pre_fichier
("classev2.php","cadrejaune") ;
00818     
00819     
p
("texte") ;
00820     echo
" La fonction "
.b("debutPageHtml()")." g&egrave;re le document (avec les bons " ;
00821     echo
" tags de d&eacute;but "
.b("&lt;html&#62;").", ".b("&lt;body&#62;")." etc.). " ;
00822     echo
" Chaque saisie particuli&egrave;re utilise son formulaire "
.b("$HTML")."&nbsp;:" ;
00823     
finp() ;
00824     
00825     
pre_fichier
("classev3.php","cadrejaune") ;
00826     
00827     
p
("texte") ;
00828     echo
" La gestion des calculs consiste &agrave; appeler le sous-programme "
.b("calculs")." avec comme " ;
00829     echo
" param&egrave;tre une chaine de caract&egrave;re qui contient toutes les valeurs entr&eacute;es. Dans le cas d'une saisie " ;
00830     echo
" dans le formulaire, on dispose tout de suite de cette variable. Dans le cas de la saisie " ;
00831     echo
" sur fichier local, on vient lire le fichier et transf&eacute;rer son contenu dans cette variable. " ;
00832     echo
" Nous avions convenu pour le format d'entr&eacute;e de s&eacute;parer le nom des notes par une &eacute;toile (mais pas " ;
00833     echo
" d'imposer un nombre de notes). La partie "
.b("calculs")." vient lire la variable caract&egrave;re " ;
00834     echo
" par caract&egrave;re, rempla&#231;ant au passage les sauts de ligne par des espaces et d&eacute;coupe " ;
00835     echo
" en mots la variable, en affectant l&agrave; o&#249; il faut d&egrave;s que l'&eacute;toile est trouv&eacute;e. Pour les " ;
00836     echo
" affichages, nous faisons appel &agrave; la m&#234;me fonction puisque nous trions les tableaux " ;
00837     echo
em
("in situ")." d&eacute;finies comme des variables globales. " ;
00838     
finp() ;
00839     
00840     
p() ;
00841     
tarea_fichier
("classev4.php","cadrebleu") ;
00842     
finp() ;
00843     
00844     
p() ;
00845     echo
" Vous pouvez tester "
.href("pgenphp3.htm","ici")." ce programme. " ;
00846     
finp() ;
00847     
00848     
finblockquote
() ; # sous-section
00849     
00850     
finblockquote
() ; # section
00851     
00852     #########################################################################################################################
00853     
00854     
$sect
++ ; h2(aname($sect.". Exemples sp&eacute;cifiques en $PHP","tth_sEc$sect.")) ; $sous = 0 ; # section 4
00855     
00856     #########################################################################################################################
00857     
00858     
blockquote
() ; # section
00859     
00860     
$sous
++ ; h3(aname("$sect.$sous Tableaux associatifs et Expressions r&eacute;guli&egrave;res","tth_sEc$sect.$sous")) ;
00861     
00862     
blockquote
() ; # sous-section
00863     
00864     
p
("texte") ;
00865     echo
" Une fois la syntaxe de base de
$PHP maitris&eacute;e, il reste &agrave; bien savoir utiliser les " ;
00866     echo
href
("https://fr.wikipedia.org/wiki/Tableau_associatif","tableaux associatifs")." et les expressions r&eacute;guli&egrave;res, " ;
00867     echo
" parce que le code
$PHP devient alors concis et efficace. " ;
00868     
finp() ;
00869     
00870     
p
("texte") ;
00871     echo
" Pour les tableaux, nous conseillons le lien " ;
00872     echo
href
("http://www.apprendre-php.com/tutoriels/tutoriel-7-les-tableaux-ou-arrays.html","tutoriel-7") ;
00873     echo
" sur "
.href("http://www.apprendre-php.com/","www.apprendre-php.com").", ce qui am&egrave;ne &agrave; " ;
00874     echo
" l'instruction "
.href("http://php.net/manual/fr/control-structures.foreach.php","foreach").". " ;
00875     echo
" En ce qui concerne les expressions r&eacute;guli&egrave;res, sur le " ;
00876     echo
href
("http://www.siteduzero.com/","siteduzero.com") ;
00877     echo
" on trouve une " ;
00878     echo
href
("http://www.siteduzero.com/informatique/tutoriels/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2","gentille introduction") ;
00879     echo
" qu'on pourra compl&eacute;ter par la page du " ;
00880     echo
href
("http://fr.wikipedia.org/wiki/Expression_rationnelle","wiki fran&ccedil;ais")." et du " ;
00881     echo
href
("http://en.wikipedia.org/wiki/Regular_expression","wiki anglais")." , " ;
00882     echo
" par le " ;
00883     echo
href
("http://phpcodeur.net/articles/php/regex1","tutorial de phpcodeur").", " ;
00884     echo
" puis par des exemples orient&eacute;s Web via " ;
00885     echo
href
("http://www.latosensu.be/articles/core/php-regex-library/php-regex-library.php","php-regex-library") ;
00886     echo
" et enfin, on trouvera de nombreux liens techniques &agrave; la page " ;
00887     echo
href
("http://coding.smashingmagazine.com/2009/06/01/essential-guide-to-regular-expressions-tools-tutorials-and-resources/","essential-guide") ;
00888     echo
" sans oublier le " ;
00889     echo
href
("http://regexp.zug.fr/","fameux testeur de regexp")." nomm&eacute; ".b("regexp.zug") ;
00890     echo
" et notre "
.href("tutregexp.php","mini-tuteur")." sur les expressions r&eacute;guli&egrave;res. " ;
00891     echo
finp() ;
00892     
00893     
p
("texte") ;
00894     echo
" Les expressions r&eacute;guli&egrave;res trouvent naturellement leur place dans le test des valeurs saisies par les utilisateurs dans " ;
00895     echo
" les formulaires des pages Web mais on s'en sert aussi beaucoup aussi lors de la lecture de fichiers. Il faut savoir qu'en plus des " ;
00896     echo
" fonctions classiques sur fichiers comme " ;
00897     echo
href
("http://php.net/manual/fr/function.fopen.php","fopen()").", " ;
00898     echo
href
("http://php.net/manual/fr/function.fgets.php","fgets()")." et " ;
00899     echo
href
("http://php.net/manual/fr/function.fclose.php","fclose()").", " ;
00900     echo
"
$PHP fournit des fonctions \"int&eacute;ressantes\" et plus r&eacute;centes comme " ;
00901     echo
href
("http://php.net/manual/fr/function.file-get-contents.php","file_get_contents()").". " ;
00902     echo
" Rappelons au passage que
$PHP sait lire n'importe quelle URL comme un fichier en lecture seule, ce qui permet " ;
00903     echo
" de lire par programme
$PHP toutes les pages web de tous les sites du monde... en seulement quelques milliards d'heures&nbsp;! " ;
00904     
finp() ;
00905     
00906     
p() ;
00907     echo
" Voici quelques exemples pour les tableaux associatifs et les expressions r&eacute;guli&egrave;res&nbsp;: " ;
00908     
finp() ;
00909     
00910     
pre_fichier
("exemplesER.php","cadre") ;
00911     
00912     
finblockquote
() ; # sous-section
00913     
00914     
$sous
++ ; h3(aname("$sect.$sous Nombre de fichiers dans un r&eacute;pertoire","tth_sEc$sect.$sous")) ;
00915     
00916     
blockquote
() ; # sous-section
00917     
00918     
p
("texte") ;
00919     echo
"
$PHP dispose de fonctions pour interagir avec le syst&egrave;me d'exploitation. Par exemple la fonction ".ghBleu("dir()")." renvoie une variable " ;
00920     echo
" (une "
.em("instance d'objet")." en fait) de type r&eacute;pertoire. On peut donc lui appliquer la " ;
00921     echo
em
("m&eacute;thode")." ".ghBleu("read()")." et la m&eacute;thode ".ghBleu("close()").". " ;
00922     echo
" Comme son nom l'indique, "
.ghBleu("read()")." permet de lire les entr&eacute;es du r&eacute;pertoire, y compris " ;
00923     echo
" "
.b(".")." et ".b("..")." (sous Unix). " ;
00924     echo
" Plus pr&eacute;cis&eacute;ment, "
.ghBleu("read()")." lit au premier appel la premier entr&eacute;e du r&eacute;pertoire, " ;
00925     echo
" puis l'entr&eacute;e courante dans le r&eacute;pertoire &agrave; partir de la pr&eacute;c&eacute;dente pour les appels " ;
00926     echo
" suivants, le pointeur de position &eacute;tant conserv&eacute; en interne par
$PHP. " ;
00927     
finp() ;
00928     
00929     
p
("texte") ;
00930     echo
" Pour compter le nombre de fichiers dans un r&eacute;pertoire, il suffit d'appeler la fonction "
.ghBleu("dir()") ;
00931     echo
" en lui passant comme param&egrave;tre le nom du r&eacute;pertoire &agrave; consulter puis &agrave; ex&eacute;cuter une boucle sur " ;
00932     echo
" l'appel de la fonction "
.ghBleu("read()").". Par exemple, sur notre syst&egrave;me, " ;
00933     echo
" nous avons un r&eacute;pertoire "
.b("Php/")." qui contient deux sous r&eacute;pertoires, ".b("Documentation/")." et " ;
00934     echo
b
(" Programmes/").". Nous avons donc &eacute;crit une fonction ".ghBleu("dirstat()")." pour compter leur nombre de fichiers. " ;
00935     
finp() ;
00936     
00937     
p
("texte") ;
00938     echo
" Ainsi le code suivant " ;
00939     
finp() ;
00940     
00941     
pre_fichier
("dirstat.php","cadre") ;
00942     
00943     
p
("texte") ;
00944     echo
" permet d'obtenir de r&eacute;aliser un comptage et un affichage qui ressemble &agrave;&nbsp;: " ;
00945     
finp() ;
00946     
00947     
pre_fichier
("dirstat.txt","cadrebleu") ;
00948     
00949     
finblockquote
() ; # sous-section
00950     
00951     
$sous
++ ; h3(aname("$sect.$sous Requ&#234;tes SQL dont SQLite et MySQL","tth_sEc$sect.$sous")) ;
00952     
00953     
blockquote
() ; # sous-section
00954     
00955     
p
("texte") ;
00956     echo
" 2017 a vu l'arriv&eacute;e de "
.href("http://maurice-chavelli.developpez.com/tutoriels/php/nouveautes-php-7/","$PHP7").". " ;
00957     echo
" Avec cette version de
$PHP, seul ".href("http://php.net/manual/fr/book.pdo.php","PDO")." a &eacute;t&eacute; conserv&eacute; pour interfacer SQL. " ;
00958     echo
" Il faut donc imp&eacute;rativement passer au mod&egrave;le objet pour dialoguer avec les bases de donn&eacute;es. " ;
00959     echo
" L&agrave; encore, nous vous proposons de lire le cours "
.href("crs_php_bdd.pdf","php-bd")." de notre coll&egrave;gue D. LESAINT pour voir ce formalisme " ;
00960     echo
" en oeuvre. Nous fournissons toutefois ci-dessous quelques exemples de programmes
$PHP qui utilisent divers dialectes SQL." ;
00961     
finp() ;
00962     
00963     
p
("texte") ;
00964     echo
" Comme premier exemple, nous utilisons le fichier binaire "
.href("elf_sqlite3.bin") ;
00965     echo
" qui contient au format "
.href("https://www.php.net/manual/fr/book.sqlite.php","SQLIte3")." les donn&eacute;es de la table ".b("elves") ;
00966     echo
" d&eacute;crites "
.href("../Datasets/elf.htm","ici").", soit la structure et les donn&eacute;es suivantes&nbsp;:";
00967     
finp() ;
00968     
00969     
p
("texte") ;
00970     
tarea_fichier
("elves.txt","cadrejaune") ;
00971     
finp() ;
00972     
00973     
p
("texte") ;
00974     echo
" L'int&eacute;r&ecirc;t de SQLITE est que ce gestionnaire de base de donn&eacute;es ne requiert ni mot de passe ni administration sophistiqu&eacute;e et " ;
00975     echo
" qu'il permet de cr&eacute;er des bases de donn&eacute;es en m&eacute;moire (sans stockage sur disque). " ;
00976     echo
" C'est id&eacute;al en mode d&eacute;veloppement alors que MySQL sera utilis&eacute; en test et en production &agrave; moins que pour la production on n'utilise PostgresSQL." ;
00977     echo
" Voici comment connaitre le nombre d'enregistrements de la table "
.b("elves")."&nbsp;:" ;
00978     
finp() ;
00979     
00980     
pre_fichier
("db1sqlite.php","cadrebleu") ;
00981     
00982     
p
("texte") ;
00983     echo
" L'ex&eacute;cution de ce code "
.b("db1sqlite.php")." affiche " ;
00984     
finp() ;
00985     
00986     
pre_fichier
("db1sqlite_res.txt","cadrejaune") ;
00987     
00988     
p
("texte") ;
00989     echo
"Comme SQLITE cr&eacute;e le fichier de la base de donn&eacute;es s'il n'existe pas, il est prudent de v&eacute;rifier que le fichier est " ;
00990     echo
" bien l&agrave; au bon endroit, sinon SQLITE viendra le recr&eacute;er, avec aucune donn&eacute;e. De m&ecirc;me, il est possible que la version de
$PHP " ;
00991     echo
" utilis&eacute;e ne supporte pas SQLITE3, il vaut mieux le v&eacute;rifier, soit le code&nbsp;:" ;
00992     
finp() ;
00993     
00994     
pre_fichier
("db2sqlite.php","cadrebleu") ;
00995     
00996     
p
("texte") ;
00997     echo
" Il est prudent de ne pas ex&eacute;cuter des requ&ecirc;tes sans tester que cela se passe bien, avec "
.b("try/catch").". " ;
00998     echo
" Par exemple, si dans le programme pr&eacute;c&eacute;dent de comptage du nombre d'enregistrements de la table "
.b("elves") ;
00999     echo
" on fait la faute de frappe "
.b("COUNTE(*)")." au lieu de ".b("COUNT(*)") ;
01000     echo
" alors
$PHP \"se plante\"." ; # et affiche, disons en ligne de commmandes " ;
01001     
finp() ;
01002     
01003     
pre_fichier
("db3sqlite.php","cadrebleu") ;
01004     
pre_fichier
("db3sqlite_res.txt","cadrejaune") ;
01005     
01006     
p
("texte") ;
01007     echo
" Voici le code "
.b("db4sqlite.php")." qui intercepte l'erreur&nbsp;:" ;
01008     
finp() ;
01009     
01010     
pre_fichier
("db4sqlite.php","cadrebleu") ;
01011     
01012     
pre_fichier
("db4sqlite_res.txt","cadrejaune") ;
01013     
01014     
p
("texte") ;
01015     echo
" La couche objet nomm&eacute;e "
.ghBleu("PDO")." bien d&eacute;taill&eacute;e dans le " ;
01016     echo
href
("https://www.php.net/manual/fr/book.pdo.php","manuel $PHP") ;
01017     echo
" fournit une interface commune aux divers gestionnaires de bases de donn&eacute;es. " ;
01018     
finp() ;
01019     
01020     
p
("texte") ;
01021     echo
" Nous suppons pour l'exemple que MySQL contient une table "
.b("ELF")." dans la base ".b("statdata") ;
01022     echo
" accessible en lecture pour l'utilisateur "
.b("anonymous").", " ;
01023     echo
" mot de passe "
.b("anonymous").". " ;
01024     echo
" Voici comment y acc&eacute;der&nbsp;:" ;
01025     
finp() ;
01026     
01027     
pre_fichier
("db1mysql.php","cadrebleu") ;
01028     
01029     
p
("texte") ;
01030     echo
" PDO permet donc d'utiliser SQLite et MySQL avec le m&ecirc;me code, ici "
.b("db1pdo.php")."&nbsp;: " ;
01031     
finp() ;
01032     
01033     
pre_fichier
("db1pdo.php","cadrebleu") ;
01034     
01035     
pre_fichier
("db1pdo_res.txt","cadrejaune") ;
01036     
01037     
finblockquote
() ; # sous-section
01038     
01039     
finblockquote
() ; # section
01040     
01041     #########################################################################################################################
01042     
01043     
$sect
++ ; h2(aname($sect.". Exemples plus techniques en $PHP","tth_sEc$sect.")) ; $sous = 0 ; # section 5
01044     
01045     #########################################################################################################################
01046     
01047     
blockquote
() ; # section
01048     
01049     
p
("texte") ;
01050     echo
" On trouvera ici une collection de scripts plus techniques et plus originaux. " ;
01051     
# echo " Le fichier ".href("php7progs.zip","php7progs.zip")." contient les sources de quelques-uns de ces programmes " ;
01052     # echo " et des formulaires associ&eacute;s. " ;
01053     
finp() ;
01054     
01055     
p
() ; $sous++ ;
01056     echo
" &nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("http://forge.info.univ-angers.fr/~gh/Wanalexies/f_dicos.php","Dictionnaires d'un fichier texte") ;
01057     
finp() ;
01058     
01059     
p
() ; $sous++ ;
01060     echo
" &nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("http://forge.info.univ-angers.fr/~gh/Idas/Wcabiq/f_classif.php","Classification hi&eacute;rarchique de donn&eacute;es bact&eacute;riologiques") ;
01061     
finp() ;
01062     
01063     
p
() ; $sous++ ;
01064     echo
" &nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("http://forge.info.univ-angers.fr/~gh/Idas/Wcabiq/f_identif.php","Identification automatique de vecteurs d'absence-pr&eacute;sence") ;
01065     
finp() ;
01066     
01067     
p
() ; $sous++ ;
01068     echo
" &nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("http://forge.info.univ-angers.fr/~gh/jphistopct.php","Graphiques")." avec ".href("http://jpgraph.net","Jpgraph") ;
01069     
finp() ;
01070     
01071     
p
() ; $sous++ ;
01072     echo
" &nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("http://forge.info.univ-angers.fr/~gh/frames/framesindex.php","Diaporamas en $PHP") ;
01073     
finp() ;
01074     
01075     
p
() ; $sous++ ;
01076     echo
" &nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("../Leadb","Site LEADB (bioinformatique)") ;
01077     
finp() ;
01078     
01079     
p
() ; $sous++ ;
01080     echo
" &nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("http://forge.info.univ-angers.fr/~gh/affichette.php","Production de pdf")." via LaTeX " ;
01081     
finp() ;
01082     
01083     
p
() ; $sous++ ;
01084     echo
" &nbsp;&nbsp;&nbsp;&nbsp;
$sect.$sous&nbsp;".href("http://forge.info.univ-angers.fr/~gh/Pagsd/lagrange3.php","Trac&eacute; de graphe math&eacute;matique")." via Dot " ;
01085     
finp() ;
01086     
01087     
/*
01088     p() ; $sous++ ;
01089     echo " &nbsp;&nbsp;&nbsp;&nbsp;$sect.$sous&nbsp;".href("http://forge.info.univ-angers.fr/~gh/internet/chanteurs3.php","Interrogation dynamique de Google") ;
01090     finp() ;
01091     */
01092     
01093     
finblockquote
() ; # section
01094     
01095     #########################################################################################################################
01096     
01097     
$sect
++ ; h2(aname($sect.". En guise de conclusion sur $PHP","tth_sEc$sect.")) ; $sous = 0 ; # section 6
01098     
01099     #########################################################################################################################
01100     
01101     
blockquote
() ; # section
01102     
01103     
p
("texte") ;
01104     echo
" Ce texte est un petit tuteur et nous n'avons fait qu'aborder grossi&egrave;rement
$PHP. Ainsi, nous n'avons pas expliqu&eacute; en d&eacute;tail comment \n" ;
01105     echo
" on peut utiliser "
.s_span("php&nbsp;-a","grouge")." en ligne de commandes afin de profiter du mode interactif, ni comment on peut &eacute;crire des scripts qui \n" ;
01106     echo
" s'ex&eacute;cutent dans un terminal, avec "
.href("http://php.net/manual/fr/reserved.variables.argc.php",'$argc',"bleuf")." \n" ;
01107     echo
" param&egrave;tres mis dans le tableau
$PHP \n" ;
01108     echo
href
("http://php.net/manual/fr/reserved.variables.argv.php","\$argv","gbleuf nou")." , ni comment on peut interfacer le \n" ;
01109     echo
href
("http://php.net/manual/fr/book.dom.php","DOM","gvert nou")." de $HTML et de \n" ;
01110     echo
href
("../internet/montresource.php?nomfic=repx.php","$XML","grouge nou")." \n" ;
01111     echo
" avec
$PHP, ni comment on peut lire, &eacute;crire, g&eacute;rer du \n" ;
01112     echo
href
("tutxml.htm","XML","gnoir nou").", par exemple avec l'extension \n" ;
01113     echo
href
("http://php.net/manual/fr/book.simplexml.php","simplexml","gleuf nou")." de \n" ;
01114     echo
"
$PHP. \n" ;
01115     echo
" On trouvera "
.href("../internet/L2Xml/xmlphp.php","ici")." des exemples de tels traitements $XML en $PHP. \n" ;
01116     
finp() ;
01117     
01118     
p
("texte") ;
01119     echo
" De m&ecirc;me, rien n'a &eacute;t&eacute; dit sur les liens entre Javascript et
$PHP donc rien sur \n" ;
01120     echo
href
("tutajax.php","AJAX","gbleuf nou")." , ni avec les graphiques de type PNG, GIF ou \n" ;
01121     echo
href
("http://fr.wikipedia.org/wiki/Scalable_Vector_Graphics","SVG","gvertf nou").". \n" ;
01122     echo
" Si on sait que
$PHP peut g&eacute;rer les divers ".href("http://www.php.net/manual/fr/wrappers.php","protocoles","gvert nou") ;
01123     echo
" de transmissions de donn&eacute;es, on peut en d&eacute;duire qu'avec
$PHP on peut &eacute;crire des gestionnaires \n" ;
01124     echo
"
$FTP ou des gestionnaires de messagerie en $PHP ou des syst&egrave;mes de transaction de cartes bancaires en $PHP. Vous comprendrez que \n" ;
01125     echo
"
$PHP est une mine, une source... &agrave; preuve la liste de ".href("http://www.php.net/manual/fr/funcref.php","toutes","gvertf nou")." les fonctions $PHP. \n" ;
01126     
finp() ;
01127     
01128     
p
("texte") ;
01129     echo
" Pourtant, il faut certainement &ecirc;tre un peu critique, car
$PHP est un fils un peu &laquo;indigne&raquo; de $Perl, \n" ;
01130     echo
" (voir par exemple "
.href("http://tnx.nl/php.html","contrast","grouge nou")."), $PHP est un langage assez mal con&ccedil;u et encore plus mal \n" ;
01131     echo
"impl&eacute;ment&eacute;, m&ecirc;me s'il est utilis&eacute; pratiquement partout... \n" ;
01132     
finp() ;
01133     
01134     
p
("texte") ;
01135     echo
" Nous finirons donc par vous inviter &agrave; lire notre petite biblioth&egrave;que de fonctions dites \n" ;
01136     echo
b
(href("../internet/php_conceptuel.php","conceptuelles","gnoir nou"))." \n" ;
01137     echo
" accessibles via "
.ahref("../internet/stdphp.php",snbsp()."std.php".snbsp(),"bouton_fin vert_pastel nou").". \n" ;
01138     echo
" Ce tuteur est bien s&ucirc;r &eacute;crit avec ces fonctions, c'est pourquoi il n'y a aucune balise
$HTML apparente dans le code-source $PHP de la page. " ;
01139     echo
" Vous pouvez le v&eacute;rifier avec " ;
01140     echo
href
("montresource.php?nomfic=tutphp7.php","le lien en fin de page","orange_stim nou")."." ;
01141     
finp() ;
01142     
01143     
p
("texte") ;
01144     echo
" Nous vous encourageons aussi &agrave; lire nos exercices corrig&eacute;s \n" ;
01145     echo
" de Licence 2"
.sup("&egrave;me")." ann&eacute;e pour le d&eacute;veloppement Web, \n" ;
01146     echo
href
("../internet/l2.php","niveau &eacute;l&eacute;mentaire","gvert nou")." \n" ;
01147     echo
" et \n" ;
01148     echo
href
("../internet/l2a.php","niveau avanc&eacute;","gbleuf nou")." , nos \n" ;
01149     echo
href
("../internet/pdc.php","exercices corrig&eacute;s de Licence Pro","gvert nou").", \n" ;
01150     echo
" nos \n" ;
01151     echo
href
("tutliste.htm","tuteurs de divers langages","grouge nou")." \n" ;
01152     echo
" ainsi que nos \n" ;
01153     echo
href
("../Scripts","cours avec exercices corrig&eacute;s","grouge nou")." \n" ;
01154     echo
" sur
$XML, les langages de scripts et les frameworks de \n" ;
01155     echo
" d&eacute;veloppement, car on y parle encore de
$PHP... ";
01156     
finp() ;
01157     
01158     
01159     
p
("texte") ;
01160     echo
"Enfin, il faudrait sans doute aussi parler de " ;
01161     echo
b
("programmation concise")." en $PHP comme " ;
01162     echo
href
("http://forge.info.univ-angers.fr/~gh/Decra/td4.php#tdm2","ici").", " ;
01163     echo
" il faudrait &eacute;voquer les tests en
$PHP par exemple avec " ;
01164     echo
href
("https://phpunit.readthedocs.io/fr/latest/writing-tests-for-phpunit.html","phpunit") ;
01165     echo
" ou encore l'automatisation des interfaces Web avec des " ;
01166     echo
href
("https://fr.wikipedia.org/wiki/Navigateur_sans_t%C3%AAte",em("headless browsers")).", " ;
01167     echo
" disons avec " ;
01168     echo
href
("https://github.com/nesk/puphpeteer","puphpeteer") ;
01169     echo
" pour finir avec les frameworks de d&eacute;veloppement
$PHP comme indiqu&eacute;s " ;
01170     echo
href
("https://raygun.com/blog/top-php-frameworks/","ici") ;
01171     echo
" afin d'avoir une id&eacute;e un peu plus compl&egrave;te de ce que repr&eacute;sente " ;
01172     echo
href
("https://yourstory.com/mystory/top-10-websites-developed-in-php",$PHP)." aujourd'hui." ;
01173     
finp() ;
01174     
01175     
p
("texte") ;
01176     echo
b
("Bonne lecture&nbsp;! \n") ;
01177     
finp() ;
01178     
01179     
finblockquote
() ; # section
01180     
01181     #########################################################################################################################
01182     
01183     
pvide() ;
01184     
p() ;
01185     echo
href
("montresource.php?nomfic=tutphp7.php","Code-source $PHP de cette page","orange_stim nou")."." ;
01186     
finp() ;
01187     
01188     
finSection() ;
01189     
finPage() ;
01190     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)