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"] = # 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 ;
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 ;
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 
;
00141     
00142     #########################################################################################################################
00143     
00144     $sect
++ ; h2(aname($sect.". Pr&eacute;sentation de $PHP","tth_sEc$sect.")) ; $sous ;  # 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 # 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 # 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 # 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 # 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 ;  # 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)