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.

<?php
phpinfo();
?>

Utilisation des variables

Ces exercices sont des rappels donc ne devraient poser aucune difficulté, si vous séchez, relisez ce cours sur les variables.

variables_normales

Concevez une page qui s'appelle variables_normales.php et ajoutez-y ce bout de code :

<?php
$nom='Gaspard';
$age=31;
$taille=1.78;
$bac=true; //pour les non bacheliers, ce sera $bac=false;
?>

Grâce à 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 define).

variables_superglobales

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
	<title>les superglobales</title>
	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
	<style>
	body{font: normal normal normal 0.6em helvetica, sans-serif;}
	label{display:block;}
	</style>
</head>
<body>
<form action="variables_superglobales.php" method="get" accept-charset="utf-8">
	<label for="nom">nom</label><input type="text" name="nom" value="" id="nom" />
	<label for="age">age</label><input type="text" name="age" value="" id="age" />
	<label for="taille">taille</label><input type="text" name="taille" value="" id="taille" />
	<label for="bac">Cochez cette case si vous avez eu votre bac</label>
	<input type="checkbox" name="bac" value="true" id="bac" />
	<p><input type="submit" value="Envoyer &rarr;" /></p>
</form>
</body>
</html>

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 variables réservées et isset.

Rajoutez comme informations :

  • Le nom du fichier en cours (voir les constantes magiques)
  • La version de PHP (voir les 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 ? 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 for ou 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.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
	<title>les gens que j'aime</title>
	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
	<style>
	body{font: normal normal normal 0.6em helvetica, sans-serif;}
	label{display:block;}
	</style>
</head>
<body>
<form action="structure_explode.php" method="get" accept-charset="utf-8">
	<label for="gens">Entrez ici la liste des gens que vous aimez séparés par des virgules</label>
	<input type="text" name="gens" value="" id="gens" />
	<p><input type="submit" value="Envoyer &rarr;" /></p>
</form>
</body>
</html>

En utilisant la fonction explode affichez une liste (avec <ul> et <li>) qui fait la liste des gens cités dans le formulaire.

Pour ce faire, vous allez utiliser la notion de tableaux, on reviendra dessus au td09. Souvenez-vous que pour compter le nombre d'éléments d'un tableau vous pouvez utiliser count.

NB 1 : Vous pouvez aussi utiliser la fonction trim pour enlever les espaces.
NB 2 : Si vous vous ennuyez, vous pouvez utiliser preg_split ou preg_match. Plus d'infos sur la doc PHP des fonctions PCRE (Perl Compatible Regular Expressions)

Les dates

PHP fournit un ensemble d'objets pour gérer les dates. On utilise notamment date qui prend entre parenthèses des caractères correspondant à leur rendu.

echo '<p>Hello ! What is the day today ? It is '.date("l").' !</p>';

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 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 strtotime et 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 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 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 floor(), ceil(), ou 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 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 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 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 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 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 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 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 récupérées sur google images

Dans la page php, vous afficherez une galerie d'images contenues dans le dossier.

  • Utiliez scandir pour lister le contenu du répertoire.
  • Vérifiez bien que ce sont des fichiers (et non pas des dossiers) avec 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 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 readdir parce que c'est un peu tordu.

fichier_titre

En utilisant fopen et l'article sur les fichiers distants

Affichez le titre de la page d'un site comme par exemple l'article de Wikipedia sur les Grenouilles

fichier_wikipedia

Afficher sur cette page PHP le contenu de l'article de Wikipedia sur les Grenouilles. Pour ce faire, vous utiliserez 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 files-upload-post-method.

<form enctype="multipart/form-data" action="fichier_upload.php" method="post" accept-charset="utf-8">
	<label for="file">file</label><input type="file" name="file" value="" id="file">
	<p><input type="submit" value="Envoyer &rarr;"></p>
</form>

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 is_uploaded_file et 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 :

<form enctype="multipart/form-data" action="fichier_upload_image.php" method="post" accept-charset="utf-8">

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 unlink ou rmdir.

Pour des raisons de sécurité, assurez-vous que le fichier uploadé est bien une image (en utilisant 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) :

Rappel : pour voir la doc de la fonction is_uploaded_file, rendez vous sur is_uploaded_file

ressources/php/td08.txt · Last modified: 2013/06/16 22:51 (external edit)
 
 
Creative Commons License Powered by PHP Valid XHTML 1.0 April