====== TD08 : on se remet dans le bain. ======
N'hésitez pas à relire les cours d'[[initiation]].
Pour commencer, créez un dossier td08 dans lequel vous créez un fichier phpinfo.php celui-ci contient ce code pour afficher l'ensemble des infos du PHP installé sur votre ordi.
===== Utilisation des variables =====
Ces exercices sont des rappels donc ne devraient poser aucune difficulté, si vous séchez, [[http://www.atelierphp.net/lesson_02_variables/lesson_02.php|relisez ce cours sur les variables]].
==== variables_normales ====
Concevez une page qui s'appelle variables_normales.php et ajoutez-y ce bout de code :
Grâce à [[phpfn>echo]] et à ce bout de code, écrivez un texte qui ressemble à ça.
Bonjour, je m'appelle Gaspard, j'ai 31 ans je mesure 1.78m et j'ai eu mon bac.
==== variables_define ====
Dans le fichier variables_define.php utilisez des constantes au lieu des variables (en utilisant la fonction [[phpfn>define]]).
==== variables_superglobales ====
Créez un fichier variables_superglobales.php à partir de variables_normales.php et ajoutez y en HTML un formulaire qui a pour but de pouvoir saisir ces informations.
Une fois qu'on envoie le formulaire, les infos saisies s'affichent mises en forme dans le body du document HTML et le formulaire ne s'affiche plus Pour récupérer les informations saisies dans un formulaire, utilisez les [[http://php.net/manual/fr/reserved.variables.php|variables réservées]] et [[phpfn>isset]].
Rajoutez comme informations :
* Le nom du fichier en cours (voir les [[http://php.net/manual/fr/language.constants.predefined.php|constantes magiques]])
* La version de PHP (voir les [[http://php.net/manual/en/reserved.constants.php|constantes réservées]])
* L'adresse IP (qui devrait être soit 127.0.0.1, soit un truc du genre 01:23:45:67:89:ab ou ::1)
* La signature User Agent du navigateur
* Le type de serveur (ce devrait être quelque chose genre Apache/2.0.63 (Unix) PHP/5.3.2 DAV/2)
===== Les structures de contrôles =====
if, else, while, for, ça vous rappelle quelque chose ? [[http://www.atelierphp.net/lesson_04_control_structures/lesson_04.php|le cours est ici]].
==== structure_while ====
Créez un fichier nommé structure_while.php qui affiche, séparés par des virgules, tous les chiffres de 0 jusqu'au nombre avant 1245 (vous pouvez utiliser [[phpfn>for]] ou [[phpfn>while]]).
Si votre code est bon, vous devriez afficher 1245 nombres : 0,1,2,3...1242,1243,1244.
==== structure_kiwibanane ====
Le but est d'afficher ce texte
kiwi
banane
banane
kiwi
banane
banane
kiwi
banane
banane
Pour ce faire, refaites l'exercice du [[td02]] en utilisant les boucles for, while et do while.
Vous crérez donc les fichiers structure_kiwibanane_for.php, structure_kiwibanane_while.php et structure_kiwibanane_dowhile.php
==== structure_explode ====
Faites une page qui affiche les gens que vous aimez.
Dans le formulaire ci-dessous il y aura une liste de gens séparés par des virgules.
En utilisant la fonction [[phpfn>explode]] affichez une liste (avec
echo 'Hello ! What is the day today ? It is '.date("l").' !
';
En PHP, et en informatique en générales, les dates sont gérées en nombre de secondes écoulées depuis le 1er janvier 1970, on appelle ça [[wp>Unix_time|le temps UNIX]]. Par exemple, au moment où j'écris ces lignes, le temps UNIX est 1285583993. Pour voir le temps UNIX actuel, faites simplement
echo time();
Pour transcrire les dates telles que nous les connaissons en temps UNIX, on utilise aussi notamment [[phpfn>strtotime]] et [[phpfn>mktime]].
==== date_journaissance ====
Concevez une page qui s'appelle date_journaissance.php qui affiche
"the day i was born, we were a (par exemple monday)"
Pour ce faire, vous devrez utiliser date(), la réponse se trouve [[http://php.net/date|sur la page de documentation de date()]] à la section "Exemple #1 Exemple avec date()".
==== date_secondesdiplomes ====
Concevez une page qui s'appelle date_secondesdiplomes.php qui affiche
"Je serai diplômé dans 1565762576523 secondes".
Disons pour faire simple que vous serez diplômé le le 17 juillet 2016 à 18h00.
Vous pouvez utiliser la fonction [[phpfn>time]] mais ce n'est pas obligatoire.
==== date_joursdiplomes ====
Concevez une page qui s'appelle date_jourssdiplomes.php qui affiche
"Je serai diplômé dans 798 jours".
Combien y a-t-il de secondes dans une journée ? (à vos calculatrices).
Pour arrondir, vous pouvez utiliser [[http://fr.php.net/floor|floor()]], [[http://fr.php.net/ceil|ceil()]], ou [[http://fr.php.net/round|round()]], selon ce qui vous semble le plus cohérent.
===== Les fonctions =====
Vous savez utiliser plusieurs fonctions comme date() echo etc. il est temps de réviser la création de vos propres fonction.
Si vous avez besoin de vous rafraichir la mémoire, il y a [[http://www.atelierphp.net/lesson_06_functions/lesson_06.php|un cours sur les fonctions à relire]].
==== fonction_disbonjour ====
Concevez une page qui s'appelle fonction_disbonjour.php qui affiche
"bonjour Pauline !"
Il faut faire un formulaire qui a en entrée un champ texte, et un bouton de type submit et une fonction dis_bonjour();
function dis_bonjour($nom){
// ici c'est à vous de coder
}
Pour afficher le résultat, un simple echo de la fonction puisqu'on prendra le soin d'utiliser [[http://php.net/manual/fr/functions.returning-values.php|une valeur de retour]]
echo dis_bonjour($_GET['nom']);
==== fonction_joyeuxanniversaire ====
Dans le même genre, on peut maintenant passer deux paramêtres : le prénom et l'âge. Petit bonus : on affiche des bougies à souffler (utiliser le caractère i).
La fonction se structure ainsi
function dire_joyeux_anniversaire($prenom,$age=20){
// ici c'est à vous de coder
}
Elle s'utiliser comme celà
echo dire_joyeux_anniversaire('delphine','21');
et le rendu est d'une rare beauté graphique
bonjour delphine, aujourd'hui tu as 21 ans, et pour ton anniversaire voici tes bougies : iiiiiiiiiiiiiiiiiiiii
==== fonction_plusgrandedate ====
Créez un fichier contenant un formulaire dans lequel vous pouvez saisir deux dates. Quand le formulaire est envoyé, la fonction affiche la date la plus élevée.
Pour déterminer laquelle des deux dates est la plus grande, transcrivez les dates en secondes avec [[http://fr.php.net/strtotime|strtotime()]] et comparez le nombre de secondes.
==== fonction_calculnbjours ====
Créez un fichier contenant un formulaire dans lequel vous pouvez saisir deux dates. Quand le formulaire est envoyé, la fonction affiche le nombre de jours entre les deux dates.
==== fonction_recursive (optionnel) ====
Un peu plus dur, recodez une sorte de [[phpfn>strlen]] en PHP :
* créez une fonction qui s'appelle compte_caracteres qui compte le nombre de caractères d'une chaîne
* cette fonction ne compte pas les caractères espace, donc "un navet" renvoie 7 (au lieu de 8 avec strlen)
* cette fonction ne peut pas utiliser la fonction strlen (évidemment)
* cette fonction doit s'appeler elle-même (c'est justement ça le principe de la [[go>récursivité]])
Créez une fonction compte_caracteres() . Créez un formulaire de saisie, une fois celui-ci envoyé, la page affiche "le texte contient 17 lettres".
===== Les gestion de fichiers =====
Un petit rappel sur [[http://www.atelierphp.net/lesson_12_i_o_functions/lesson_12.php|la gestion des fichiers]].
Pour ceux qui sont sur Mac et/ou sur Linux, vous risquez d'avoir pas mal d'erreurs liées à la gestion des droits de lecture, écriture, etc. soyez donc particulièrement vigilants.
==== fichier_meteo ====
créez deux fichiers : un fichier_meteo.php et un fichier_meteo.txt.
Dans le fichier fichier_meteo.txt il y a écrit par exemple "soleil" (ou "nuageux") et le fichier fichier_meteo.php va chercher les infos dedans et s'il y a écrit soleil il affiche une image de soleil, etc.
Pour ce faire, le fichier fichier_meteo.php doit lire ce qu'il y a dans le txt, mettre le contenu dans une variable et faire une série de if pour savoir quelle image afficher.
Pour lire le contenu d'un fichier et le stocker dans une variable, il y a [[phpfn>fopen]].
$fp = fopen("fichier_meteo.txt","r");
$data = fgets($fp,255);
fclose($fp);
==== fichier_compteur ====
Faites un compteur de visites.
Une page web affiche "Cette page a été regardée 5 fois", vous rafraîchissez votre navigateur et vous pouvez alors lire "Cette page a été regardée 6 fois".
Créez les fichiers fichier_compteur.php et fichier_compteur.txt. Le fichier txt contient juste un nombre (au début, c'est seulement 0) et le fichier php lit le numéro, l'affiche sur la page HTML et incrémente automatiquement le nombre dans le fichier txt.
NB : pour des raisons de performance, sur un vrai site internet, ce sera plus cohérent d'utiliser une base de données pour ce genre de fonctionnalité.
==== fichier_iplog ====
Faites un fichier qui enregistre dans un fichier texte toutes les adresses IP des visiteurs du site et la date exacte de connexion sur ce format.
2010-09-26 10:07:01 > 127.0.0.1
2010-09-26 10:07:04 > 123.456.789.123
NB : pour des raisons de performance, sur un vrai site internet, ce sera plus cohérent d'utiliser une base de données pour ce genre de fonctionnalité.
==== fichier_galerie ====
Créez un fichier fichier_gallerie.php et un dossier fichier_gallerie.
Placez des images que vous aurez [[http://www.google.com/images?as_q=colorful&um=1&hl=en&biw=1473&bih=939&btnG=Google+Search&as_epq=&as_oq=&as_eq=shoes&as_sitesearch=&safe=off&as_st=y&tbs=isch:1,isz:ex,iszw:100,iszh:100|récupérées sur google images]]
Dans la page php, vous afficherez une galerie d'images contenues dans le dossier.
* Utiliez [[phpfn>scandir]] pour lister le contenu du répertoire.
* Vérifiez bien que ce sont des fichiers (et non pas des dossiers) avec [[phpfn>is_file]]
* Vérifiez bien que ces fichiers soient des images qui ont pour extension gif, png ou jpg
Pour vérifier que l'extension soit bonne, vous pouvez utiliser ce code qui fait appel aux [[http://php.net/manual/en/book.pcre.php|expressions régulières]], bien entendu il n'est pas à utiliser tel quel.
if(preg_match('/\.(png|jpe?g|gif)$/i', $fichier){
echo 'le fichier est une image';
}
NB : n'utilisez pas [[phpfn>readdir]] parce que c'est un peu tordu.
==== fichier_titre ====
En utilisant [[phpfn>fopen]] et [[http://fr.php.net/manual/fr/features.remote-files.php|l'article sur les fichiers distants]]
Affichez le titre de la page d'un site comme par exemple [[http://fr.wikipedia.org/wiki/Grenouille|l'article de Wikipedia sur les Grenouilles]]
==== fichier_wikipedia ====
Afficher sur cette page PHP le contenu de [[http://fr.wikipedia.org/wiki/Grenouille|l'article de Wikipedia sur les Grenouilles]]. Pour ce faire, vous utiliserez [[phpfn>file_get_contents]].
NB : pour les motivés, essayez de récupérer uniquement le contenu de l'article.
==== fichier_upload ====
Créez une page fichier_upload.php et un répertoire fichier_upload/
La page PHP devra contenir ce formulaire HTML avec un input type="file", la doc est sur la page [[http://fr.php.net/manual/fr/features.file-upload.post-method.php|files-upload-post-method]].
Quand le formulaire est soumis, le script PHP doit uploader l'image sélectionnée dans le dossier fichier_upload/ en vous servant des fonctions [[phpfn>is_uploaded_file]] et [[phpfn>move_uploaded_file]]
==== fichier_upload_image ====
Dupliquez le script précédent et créez ainsi un autre fichier qui s'appelle fichier_upload_image.php. N'oubliez pas de changer l'action dans le formulaire HTML :
Ce script permet d'uploader des images (dans me même dossier). C'est dangereux de laisser les utilisateurs uploader des fichiers sur un site, s'ils uploadent des fichers .php, ils peuvent s'en servir pour hacker le site, en utilisant par exemple les fonctions [[phpfn>unlink]] ou [[phpfn>rmdir]].
Pour des raisons de sécurité, assurez-vous que le fichier uploadé est bien une image (en utilisant [[phpfn>getimagesize]] par exemple).
==== fichier_upload_thumbnail (optionnel) ====
Une thumbnail, c'est une miniature, une version petite de l'image. Dans le dossier upload, on mettra deux dossiers : un dossier images pour les images originales et un dossier thumbnails pour les miniatures.
Pour le script final : upload et generation de thumbnails vous aurez besoin de fonctions (dans l'ordre) :
* [[http://php.net/is_uploaded_file|is_uploaded_file]]
* [[http://fr.php.net/manual/en/function.getimagesize|getimagesize ]]
* [[http://fr.php.net/imagecreatetruecolor|imagecreatetruecolor]]
* [[http://fr.php.net/imagecreatefromjpeg|imagecreatefromjpeg]]
* [[http://fr.php.net/imagecreatefrompng|imagecreatefrompng]]
* [[http://fr.php.net/imagecreatefromgif|imagecreatefromgif]]
* [[http://fr.php.net/imagecopyresampled|imagecopyresampled]]
* [[http://fr.php.net/imagejpeg|imagejpeg]]
* [[http://fr.php.net/imagepng|imagepng]]
* [[http://fr.php.net/imagegif|imagegif]]
* [[http://fr.php.net/move_uploaded_file|move_uploaded_file]]
Rappel : pour voir la doc de la fonction is_uploaded_file, rendez vous sur [[phpfn>is_uploaded_file]]