1.1 POO
1.2 POO 2.1 POO
2.2 POO
3.1 Exceptions et Gestion d’erreurs
3.2 Fichiers : UPLOAD, data mining
4.1 WebServices
4.2 Mail et Graphics GD
• Gestion d’erreurs
• Téléchargement de fichiers
• XML
• SOAP
• Graphics
Environnement objet sur PHP :
Ø Eclipse
Ø Zend Studio
• Langage procédural
• Introduit objet dans la version 4
• Modif
On peur programmer en PHP sans utiliser objet, c’est une question de style et de marché.
è Mais pour utiliser certaines fonctions, il faut employer la syntaxe objet.
è Style de programmation : une classe, un fichier
o Problème avec beaucoup d’includes.
ð Include _once, Require
En JS il n’y avait pas cette distinction : objet prototype.
Java respecte la définition de la POO, en distinguant clairement la classe de l’objet. La classe n’est
Si JS définissait le prototype par son constructeur, avec le mot function, PHP possède le mot Class. Par exemple, pour créer la classe Magasin :
class Magasin {
}
Créer cette fonction dans la page et créer la page testMagasin :
include ""; $m = new Magasin(); echo ($m);
Si l’o
On écrit normalement une méthode de la façon suivante:
function write($produit ) {
//
}
Pour ne pas afficher le code de l’objet, PHP permet la méthode toString :
class Magasin {
function __toString() {
return "** Magasin
}
Modifier alors la classe magasin pour inclure une méthode spécifique qui permet l’affichage d’une classe avec les valeurs que l’on souhaite : la méthode __toString().
PHP possède un ensemble de méthodes spéciaux qui comme
<?php class Magasin {
function __toString() {
}
}
?>
On les déclare dans le corps de la classe avec le mot var :
class Magasin { public $v1 = 7; fun
return " ** Magasin : " . $this->v1;
}
}
Elles sont des propriétés de l’objet, étant accessibles avec le mot $this : $this->v1 ;
Var, Public
Private
Protected : visível na classe ou nas
Créer la variable $v1 comme public et comme privé.
9. Getters et setters
Encapsulation de $v1.
Constructeur dans PHP5 : __construct() (diffère de PHP 4, où l’on a le même nom de la classe)
class Magasin {
private $nom;
$this->nom = $nom ;
}
function __toString() {
}
}
Créer un deuxième objet :
class Produit { public $ nom;
public $prix= 0;
function __construct( $nom, $prix ) {
$this-> nom = $ nom;
$this->prix = $prix;
}
function g
}
}
On écrit maintenant la classe Produi
La solution est donnée par la méthode __autoload. Il faut créer un fichier par classe avec exactement le même nom.
function __autoload($ClassName) { include 'classes/' . $ClassName . '.php';
}
Créer 2 magasins avec 3 et 4 produits.
Magasin :class Magasin {
private $nom;
public $tabProduit = Array() ;
function __construct($nom
$this->nom = $nom ;
}
function nouveauProduit(Produit $produit) {
$this->tabProduit[]
}
function afficheProduits() { foreach ($this->tabProduit as $p){ echo '<br> >> ' . $p;
}
}
function __toString() {
echo "<br><br> ** Magasin " . $this-> nom;
$this->afficheProduits();
}
}
:Class Produit {
public $nom; private $prix;
function __construct($nom, $prix) {
$this->prix = $prix;
function __toString() {
}
function getPrix() { return "Prix : {$this->prix }" ;
}
}
function __autoload($ClassName) { include 'classes/' . $ClassName . '.php';
}
$m1 = new Magasin("Darty");
$p1 = new Produit("Ipod", 222);
$m1->nouveauProduit($p1);
$p2 = new Produit("Plasma", 5423); $m1->nouveauProduit($p2); echo ($m1);
$m2 = new Magasin("Fnac");
$p1 = new Produit("Ipod", 222);
$m2->nouveauProdui
$m2->nouveauProduit(new Produit("Archos", 44)); $m2->nouveauProduit(new Produit("CD", 125)); echo ($m2);
Créer 1 Client et faire des courses dans les deux magasins et comparer les coûts.
testMagasin :
function __autoload($ClassName) { include 'classes/' . $ClassName . '.php';
}
$m1 = new Magasin("Darty");
$p1 = new Produit("Ipod", 222);
$m1->nouveauProduit($p1);
$p2 = new Produit("Plasma", 54
$m1->nouveauProduit($p2);
$m1->nouveauProduit(new Produit("ecouteurs ", 21));
$m1->nouveauProduit(new Produit("Ixus", 145)); $m1->nouveauProduit(new Produit("Pentax", 2002)); echo ($m1);
$m2 = new Magasin("Fnac");
$p1 = new Produit("Ipod", 222);
$m2->nouveauProduit(new Produit("Ipod", 205));
$m2->nouveauProduit(new Produit("Archos", 44)); $m2->nouveauProduit(new Produit("CD", 125)); echo ($m2);
$c1 = new Client("Pierre");
$c1-&
$c1->nouveauProduit($m1->getProduit(1));
$c1->nouveauProduit($m1->getProduit(4));
$c1->afficheTotal();
Magasin :class Magasin {
private $nom;
private $tabProduit = Array() ;
$this->nom = $nom ;
}
function nouveauProduit(Produit $produit) {
$this->tabProduit[]=$produit ;
}
function afficheProduits() { foreach ($this->tabProduit as $p){
}
}
public function getProduit( $ind ){ return $this->tabProduit[$ind];
}
function __toString() {
$this->afficheProduits();
return "<br>";
}
Produit :
Class Produit {
public $nom; private $prix;
function __construct($nom, $prix) {
$this->nom = $nom;
}
function getPrix() {
return $this->prix;
}
function __toString() {
}
}
Client :
class Client {
private $nom;
public $tabProduit = Array() ;
$this->nom = $nom ;
}
function nouveauProduit(Produit $produit) {
$this->tabProduit[]=$produit ;
}
function afficheProduits() {
}
}
function afficheTotal() {
echo "<br><br> --> Total de " . $this-> nom . " est de " . $this->getTotal();
}
function getTotal() {
foreach ($this->tabProduit as $p)
$tot += $p->getPrix();
return $tot;
}
echo "<br><br> ** Magasin " . $thi
return "<br>";
}
1. Gestion des sessions
Sessões HTTP serv
• session_start(); // crée ou recupére une s
• session_register( ”VARIÁVEL" ); à Ou se referer directement $_SESSION[‘toto’] = 1 ;
• session_destroy();
2. Méthodes de propagation
Il y a deux modes de propagation de l'identifiant de session :
• Cookies
• Paramètre URL
Le module de session supporte les deux techniques. La méthode par cookies est optimale, mais étant donné le peu de fiabilité (les clients peuvent les refuser, ou
Verifier avec phpinfo()session
Session Support | enabled |
Registered save handlers | files user |
Directive | Local Value | Master Value | ||
session.auto_start | Off | Off | ||
session.bug_compat_42 | Off | Off | ||
session.bug_compat_warn | On | On | ||
session.cache_expire | 180 | 180 | ||
session.entropy_length | 0 | 0 | ||
session.gc_divisor | | 1000 | ||
session.gc_maxlifetime | 1440 | 1440 ![]() | ||
session.gc_probability | 1 | 1 | ||
![]() PHPSESSID | PHPSESSID | |||
session.referer_check | no value | no value | files | f |
session.save_path | C:\PROGRA~1\EASYPH~1\\tmp\ | C:\PROGRA~1\EASYPH~1\\tmp\ | ||
session.serialize_handler | php | | ||
session.use_cookies | On | On ![]() | ||
session.use_only_cookies | Off | Off | ||
session.use_trans_sid | Off | Off ![]() |
3. Paramètre url
L’appel à session_start() doit être la première ligne, car il envoye des headers.
On travaille avec des variables qui s
Exemple :
Index Page x
Nom ------------------------------------------
Mdp
$_SESSION[‘Nom’] = $_POST[‘Nom’]
$_SESSION[‘active’] = « oui »
Remarque : ne pas oublier de tester isset()
Si les cookies ne marchent pas, utiliser la constante S
A retenir à propos de la gestion des sessions sur PHP
1) session_start() doit être présente dans toutes les pages concern
2) session_start() doit être la première instruction d’une page php (avant toute balise HTML).
3) Sauvegarder les variables de sess
4) Ne pas oublier de tester si les variables $_SESSION, $_POST ou $_GET sont renseignées avec isset().
5 ) Pour sauver des objets, il faut leur mettre dans la session. & Est l’adressage par référence.
TestMagasin1 :<?php function __autoload($ClassName) {
include 'classes/' . $ClassName . '.php';
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"">
<html>
<head>
<title>Document sans titre</title>
</head>
<body>
<?php
$m1 = &$_SESSION ['m1'];
$m1 = new Magasin("Darty");
$p1 = new Produit("Ipod", 222);
$m1->nouveauProduit($p1);
$p2 = new Prod
$m1->nouveauProduit($p2);
$m1->nouveauProduit(new Produit("ecouteurs ", 21));
$m1->nouveauProduit(new Produit("Ixus", 145)); $m1->nouveauProduit(new Produit("Pentax", 2002)); echo ($m1);
?>
<p> </p>
<p><a href=''>Faire les courses</a></p>
</body>
</html>
TestMagasin2 :
<?php function __autoload($ClassName) {
include 'classes/' . $ClassName . '.php';
}
session_start();?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$c1 = new Client("Pierre");
$c1->nouveauProduit($_SESSION['m1']->getProduit(0)
$c1->nouveauProduit($_SESSION['m1']->getProduit(1));
$c1->nouveauProduit($_SESSION['m1']->getProduit(4));
$c1->afficheTotal();
?>
</body>
</html>
Exercice :
Créer un site avec 4 pages : accueil, login, valider, deja.
J’ai crée aussi la classe , que vous devez copier.
Gestion de session : login, mdp et acces (oui/non)
La page d’accueil dit bonjour au login:
<?php
session_start();
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"">
<html xmlns=";>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html
</head>
<body> <?php
if ( !empty($_SESSION['login']) ) echo "Bonjour " . $_SESSION['login'];
?>
<p> </p>
<p> </p>
<p><a href="/">Accès restreint</a> </p>
</body>
</html>
Login :<?php
session_start();
if ( !empty( $_SESSION['acces']) )
if ( $_SESSION['acces'] == "oui" ) header ("");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"">
<html xmlns=";>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method = "post" action = "">
<fieldset>
<legend>Accès réservé aux personnes autorisées: Veuillez vous identifier.</legend>
Login <input type = "text" name ="login">
Pass <i
<input type ="submit" name="envoi" value="Entrer"/>
</fieldset>
</form> <?php if ( $_SESSION['acces'] == "non" ) echo "<b>Veuillez réessayer </b>";
?>
</body>
</html>
Valider :
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"">
<html xmlns=";>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head>
<body> <?php
$u = new Utilisateur( $_POST['login'], $_POST['mdp'] ); if ( $u->existe() ){
$_SESSION['acces'] = "oui";
$_SESSION['login'] = $_POST['login'];
echo "Soyez le bienvenue <b>" . $_SESSION['login'] . "</b>";
} else {
$_SESSION['acces'] = "non";
header ("");
}
?>
<p>Pour mettre à jour les pages du site, cliquez ici </p>
</body>
</html>
Deja
"">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body>
Vous êtes déjà connecté: cliquez ici pour accéder au catalogue </body>
</html>
static public $i ; static public maMethode()
constantes : const
class Magasin {
private $nom;
private $tabProduit = Array() ; static private $totalProduits;
function __construct($nom) {
$this->nom = $nom ;
}
function nouveauProduit(Produit $produit) { $this->tabProduit[]=$produit ; self::$totalProduits++;
}
function afficheProduits() { foreach ($this->tabProduit as $p){ echo '<br> >> ' . $p;
}
}
public function getProduit( $ind ){
}
}
function __toString() {
$this->afficheProduits();
return "<br>";
}
<?php
function __autoload($ClassName) { include 'classes/' . $ClassName . '.php';
}
$m1 = new Magasin("Darty");
$p1 = new Produit("Ipod", 222);
$m1->nouveauProduit($p1);
$p2 = new Produit("Plasma", 5423);
$m1->nouveauProduit($p2);
$m1->nouveauProduit(new Produit("ecouteurs ", 21));
$m1->nouveauProduit(new Produit("Ixus", 145)); $m1->nouveauProduit(new Produit("Pentax", 2002)); echo ($m1);
$m2 = new Magasin("Fnac");
$p1 = new Produit("Ipod", 222);
$m2->nouveauProduit(new Produit("Ipod", 205));
$m2->nouveauProduit(new Produit("Archos", 44)); $m2->nouveauProduit(new Produit("CD", 125)); echo ($m2);
echo $l1;
$c1 = new Client("Pierre");
$c1->nouveauProduit($m1->getProduit(0));
$c1->nouveauProduit($m1->getProduit(1));
$c1->nouveauProduit($m1->getProduit(4));
$c1->afficheTotal();
?>
Class fils extends pere {
}
Dans ce
Mot réservé parent. Et pour se référer à une méthode d’une classe, utiliser :: car le -> est pour l’objet.
Alors :
parent ::__construct()
Exercice :
Créer la classe Livre (avec auteur). Class Livre extends Produit{ private $auteur;
function __construct($nom, $prix, $auteur) { parent::__construct($nom, $prix);
$this->auteur = $auteur;
function getPrix() { return $this->prix;
function __toString() {
return parent::__toString() . ", auteur : " . $this->auteur;
}
}
<?php
function __autoload($
}
$m1 = new Magasin("Darty");
$p1 = new Produit("Ipod", 222);
$m1->nouveauProduit($p1);
$p2 = new Produ
$m1->nouveauProduit($p2);
$m1->nouveauProduit(new Produit("ecouteurs ", 21));
$m1->nouveauProduit(new Produit("Ixus", 145)); $m1->nouveauProduit(new Produit("Pentax", 2002)); echo ($m1);
$m2 = new Magasin("Fnac");
$
$m2->nouveauProduit(new Produit("Ipod", 205));
$m2->nouveauProduit(new Produit("Archos", 44));
$m2->nouveauProduit(new Produit("CD", 125));
echo $l1;
$c1 = new Client("Pierre");
$c1->nouveauProduit($m1->getProduit(0)); $c1->nouveauProduit($m1->getProduit(1));
$c1->nouveauProduit($m1->getProduit(4));
$c1->afficheTotal();
?>
Dans la nouvelle méthode, on peut appeler parent :: methode()
ð Le mot self :: se réfère à l
5. Classes abstraites
abstract class
Interface chargeable {}
è é implements ?
Libérer des resources
__destruct()
En PHP4, il s’agissait de fournir la même adresse :
class CopyMe {} $first = new CopyMe();
$second = $first;
// PHP 4: $second and $first are 2 distinct objects
// PHP 5 plus: $second and $first refer to one object
PHP5
class CopyMe {} $first = new CopyMe();
$second = clone $first;
// PHP 5 plus: $second and $first are 2 distinct objects
Pour controler ce qui est copié dans un objet : __clone()
Exercice :
Créer deux magasins. Copier le premier. Tester l’égalité.
$a = new Test;
$b = new Test;
$c = $a;
//$c = clone($a);
if
if ($a === $b) echo "*3"; else echo "*4";
if ($a == $c) echo "*5"; else echo "*6";
| // com = |
else echo "*8"; | // com clo |
Pour passer des objets entre des pages.
Deux methodes : __sleep() et __wakeup()
<?php
class base_class { var $var1; var $var2;
functi
$this->var1 = $value;
$this->var2 = $value * 100;
}
function calc_pow ($exp){ return pow ($var1, $exp);
}
function __toString() {
return ‘v1 : ‘ . $this->va
}
function __sleep(){
// Return an array that contains the name of
}
function __wa
// Reconstruct $var2
$this->var2 = $this->var1 * 100;
}
}
$bc = new base_class(5) ;
$cdSerial = serialize($cd);
$param = urlencode($cdSerial);
echo "<A HRE
Construction d'une classe de connexion abstraite pour l'interrogation des principales bases de données.
Le monde PHP propose 150 librairies PHP de qualité très variable. Nous allons nous pencher sur : les moteurs de template, le module GD, PDFlib et l'incontournable PEAR.
Nous allons voir aussi: XML, RSS et SOAP. Mais avant, nous allons voir la gestion des fichiers.
Fonctions disponibles:
fopen() : | Opens a handle to a local file, or a file from an URL |
fread() : | |
fgets() : | |
fwrite() : | ![]() / |
fputs() : | Writes a block of data to a file |
fclose() : | ![]() Closes the opened file handle |
feof() : | <
PHP possui várias funções para o tratamento de arquivos a fim de facilitar sua manipulação. A primeira coisa que se tem que saber é que para se manipular arquivos, tem-se que abrir e fechar o arquivo. O PHP possui as seguintes funções para se abrir e fechar arquivos:
• fopen( “nome_do_arquivo”, “mode”, [diretório] ) – Abre o arquivo
• fclose( fp ) - Fecha o arquivo
Estes modos de
r somente leitura; posiciona-se no início do arquivo. r+ leitura e escrita; posiciona-se no início do arquivo. w somente escrita; posiciona-se no início do arquivo e o trunca para tamanho zero. Caso o arquivo não exista o PHP tenta criá-lo. w+ leitura e escrita; posiciona-se no início do arquivo e o trunca para tamanho
Caso o arquivo não exista o PHP tenta criá-lo. a somente escrita; posiciona-se no final do arquivo. Caso o arquivo não exista o PHP tenta criá-lo.
a+ leitura e escrita; posiciona-se no final do arquivo. Caso o arquivo não exista o PHP tenta criá-lo.
Após abrir um arquivo, pode-se ler o conteúdo ou escrever em seu conteúdo, de acordo com a forma que se abriu o arquivo.
• fread( fp, tamanho )
• fgets( fp, tamanho )
• fwrite( fp, string, [tamanho] )
Soit on crée un fichier de façon traditionnelle :
$fp = fopen(“”, “w”); fwrite($fp, “bla bla bla \n”); fclose($fp);
Soit on crée avec une méthode rapide :
file_put_contents ( "" , "B
$fp = fopen ('', 'r'); if (!$fp) { die ("Le fichier n’a pas put être ouvert.");
}
$line = fgets($fp); echo $line; fclose($fp);
Mais on peut aussi lire un script :
$line = fgets ($file, 1024); echo $line;
}
fclose($file);
$fp = fopen ($nomedoarquivo, "r");
$contents = fread ($fd, filesize ($nomedoarquivo)); fclose ($fp);
On peut aussi retirer ses balises HTML :
$file = fopen ('', 'r'); while (!feof ($file)) {
$line = fgetss ($file, 1024); echo $line;
}
fclose($file);
Ou on peut alors utiliser une fonction qui lit tout et affiche tout:
$fp = fopen('','r');
fpassthru($fp);
On peut telecharger en changeant le type :
<?php
//$file = $_POST['date'].'.txt';
$file = '';
$fp = fopen($file, "r");
header("Content-Type:application/xls");
//header("Content-Disposition:attachment; filename=$_POST['date'].xls"); header("Content-Disposition:attachment; filename=$file");
// Notice we changed the file name and type header("Content-Transfer-Encoding:binary"); fpassthru($fp);
?>
Ereg
Eregi
Ereg_replace
Simple literal character matches
If the character involved is not special, Perl will match characters in sequence. The example pattern /abc/ matches any string that has the substring ‘abc’ in it.
Character class matches: [<list of characters>]
Will match a single instance of any of the characters between the brackets. For example, /[xyz]/ matches a single character, as long as that character is either x, y, or z. A sequence of characters (in ASCII order) is indicated by a hyphen, so that a class matching all digits is [0-9].
Predefined character class abbreviations
The patterns \d will match a single digit (from the character class [0-9]), and the pattern \s matches any whitespace character.
Multiplier patterns
Any pattern followed by * means: “Match this pattern 0 or more times.”
Any pattern followed by ? means: “Match this pattern exactly once.”
Anchoring characters
The caret character ^ at the beginning of a pattern means that the pattern must start at the beginning of the string; the $ character at the end of a pattern means that the pattern must end at the end of the string. The caret character at the beginning of a character class [^abc] means that the set is the complement of the characters listed (that is, any character that is not in the list).
Escape character ‘\’
Any character that has a special meaning to regex can be treated as a simple matching character by preceding it with a backslash. The special characters that might need this treatment are:
. \ + * ? [ ] ^ $ ( ) { } = ! < > | :
Parentheses
A parenthesis grouping around a portion of any pattern means: “Add the substring that matches this pattern to the list of substring matches.”
Si "abc" est trouvé quelque part dans la chaîne $string :
ereg ("abc", $string);
$string = "xabcd";
if (ereg ("abc", $string, $reg ) ) echo "oui $reg[0] <br>"; else echo "non<br>";
Si "abc" est trouvé au début de la chaîne $string. :
ereg ("^abc", $string);
Si "abc" est trouvé à la fin de la chaîne $string :
ereg ("abc$", $string);
Insère une balise <br /> au début de la chaîne $string :
$string = ereg_replace ("^", "<br />", $string);
Insère une balise <br /> à la fin de la chaîne $string :
$string = ereg_replace ("$", "<br />", $string);
Supprime toutes les nouvelles lignes de $string :
$string = ereg_replace ("\n", "", $string);
Cherche le titre dans une page :
if (eregi ("<title>(.*)</title>", $line, $out)) {
$title = $out[1];
break;
}
7. Travailler avec des fichiers distantes
Quelques wrappers de fichier comme http permettent d’accéder des fichiers distants.
<body>
<p>Bonjour</p>
<table width="800" border="1">
<tr>
<td><?php include (""); fopen(); ?>
</td>
</tr>
</table>
Lire la balise title :
$title = "xxx";
$file = fopen (";, "r"); if (!$file) {
echo "<p>Impossible d’ouvrir le fichier distant.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
/* This only works if the title and its tags are on one line */ if (eregi ("<title>(.*)</title>", $line, $out)) {
$title = $out[1];
break;
}
} fclose($file);
echo "*******<br>"; echo "titre: " . $title;
Créer un formulaire
<form action="" method="POST" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="25000"> Image à télécharger:
<input type="file" name="fichier">
<font size="1">Sélectionner parcourir pour sélectionner un fichier </font>
<input type="submit" value="Télécharger">
</form>
Avant de copier le fichier, nous devons tester si l’utilisateur n’essaye pas de travailler sur des fichiers qu’il n’aurait pas le droit comme etc/password. On utilise la fonction is_uploaded_file(). Si cette fonction retourne TRUE, copier le fichier vers son dossier de destination avec la fonction copy().
• The enctype attribute is used in the form tag. You must set this attribute to multipart/form-data when uploading a file to ensure that the file arrives correctly.
• The input field that uploads the file is of type file. Notice that the field has a name — user_file — as do other types of fields in a form. The filename that the user enters into the form is sent to the processing program and is available in the built-in array called FILES.
When the user submits the form, the file is uploaded to a temporary location. The script that processes the form needs to copy the file to another location because the temporary file is deleted as soon as the script is finished.
$_FILES[‘fieldname’][‘name’]
$_FILES[‘fieldname’][‘type’]
$_FILES[‘fieldname’][‘tmp_name’]
$_FILES[‘fieldname’][‘size’]
For example, suppose that you use the following field to upload a file, as shown in the previous section.
If the user uploads a file named by using the form, the resulting array that can be used by the processing program looks something like this:
$_FILES[user_file][name] =
$_FILES[user_file][type] = text/plain
$_FILES[user_file][tmp_name] = D:\WINNT\
$_FILES[user_file][size] = 435
On doit mouvoir le fichier téléchargé de son dossier temporaire vers un dossier fixe :
move_uploaded_file(path/tempfilename,path/permfilename);
The path/tempfilename is available in the built-in array element $_FILES[‘fieldname’][‘tmp_file’]. The path/permfilename is the path to the file where you want to store the file. The following statement moves the file uploaded in the input field, given the name user_file, shown earlier in this section:
move_uploaded_file($_FILES[‘user_file’][‘tmp_name’], ‘c:\data\’);
$uploaddir = './image/';
$uploadfile = $uploaddir . basename($_FILES['fic_img']['name']); echo '<pre>';
if(!ereg('image',$_FILES['fic_img']['type'])) {
echo "<b>Le fichier n'est pas une image. Essayez un autre fichier.</b><br>"; } elseif (move_uploaded_file($_FILES['fic_img']['tmp_name'], $uploadfile)) {
} else {
echo "Attaque potentielle par téléchargement de fichiers.
Voici plus d'informations :\n";
}
echo 'Voici quelques informations de déboguage :'; print_r($_FILES);
echo '</pre>';
Represente le fichier XML comme un objet PHP. Etant donné le fichier :
<clients>
<client>
<name>John Doe</name>
<account_number>87234838</account_number>
</client>
<client>
<name>Janet Smith</name>
<account_number>72384329</account_number> </client>
</clients>
Le code suivant imprime son contenu :
$clients = simplexml_load_file(''); foreach ($clients->client as $client) { print "$client->name has account number $client->account_number<br>";
$pFile = new SimpleXMLElement('', null, true);
foreach ($pFile->channel as $pChild)
{
echo "<h1>" . $pChild->title . "</h1>\n"; echo "<p>\n";
echo $pChild->description . "<br />\n";
printf('Visiter noter site <a href="/%s">%s</a><br />' . "\n", $pChild->link, $pChild->link); echo "</p>\n";
foreach ($pFile->channel->item as $pItem)
{
echo "<p>\n";
foreach ($pItem->children() as $pChild)
{
switch ($pChild->getName())
{ case 'title':
echo "<b>$pChild</b><br />\n"; break;
case 'link':
default:
echo nl2br($pChild) . "<br />\n"; break;
}
}
echo "</p>\n";
}
}
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Lift Off News</title>
<link>;/link>
<description>Liftoff to Space Exploration.</description>
<language>en-us</language>
<pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
<lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
<docs>;/docs>
<generator>Weblog Editor 2.0</generator>
<managingEditor></managingEditor>
<webMaster></webMaster>
<ttl>5</ttl>
<item>
<title>Star City</title>
<link></link>
<description>How do Americans get ready to work wih Russians aboathe International Space Station? They take a crash course in culture, language
and protocol at Russia's Star City.</description>
<pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
<guid>#item573</guid>
</item>
<item>
<title>Space Exploration</title>
<link>;/link>
<description>Sky watchers in Europe, Asia, and parts of Alaska and Canada
will experience a partial eclipse of the Sun on Saturday, May 31st.</description>
<pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
<guid>#item572</guid>
</item>
</channel>
</rss>
<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0">
<channel>
<title>Teste de transfert</title>
<link></link>
<description>Actualité des transferts avec XML.</description>
<copyright>© Tito</copyright>
<language>fr</language>
<image> <title>Teste de transfert RSS</title>
<link></link></image>
<pubdate>Wed, 25 Jun 2008 00:02:17 +0100</pubdate>
<item><title>titre1</title><link></link></item>
<item><title>titre2</title><link></link></item>
<item><title>titre3</title><link></link></item>
<item><title>titre4</title><link></link></item>
<item><title>titre5</title><link></link></item>
</channel></rss>
$url = ''; $rss = simplexml_load_file($url); foreach ($rss->channel->item as $article){
echo '<a href="' . $article->link . '">' . $article->title . '</a><br>'; }
LE MONDE :
$rss = simplexml_load_file($url); foreach ($rss->channel->item as $article){
echo '<a href="' . $article->link . '">' . $article->title . '</a><br>'; }
J’ai pris FPDF de .
Module objet avec les méthodes :
AcceptPageBreak- accepte ou non un saut de page automatique
AddFont- ajoute une nouvelle police
AddLink- crée un lien interne
AddPage- ajoute une nouvelle page
AliasNbPages- définit un alias pour le nombre de pages
Cell- imprime une cellule
Close- termine le document
Error- erreur fatale
Footer- pied de page
FPDF- constructeur
GetX- renvoie la position x courante
GetY- renvoie la position y courante
Header- en-tête
Image- imprime une image
Line- trace une ligne
Link- place un lien
Ln- saut de ligne
MultiCell- imprime du texte avec saut de ligne
Output- sauve ou envoie le document
PageNo- numéro de page
Rect- trace un rectangle
SetAuthor- définit l'auteur du document
SetAutoPageBreak- fixe le mode saut de page automatique
SetCompression- active ou désactive la compression
SetCreator- définit le créateur du document
SetDisplayMode- fixe le mode d'affichage
SetDrawColor- définit la couleur de tracé
SetFillColor- définit la couleur de remplissage
SetFont- fixe la police
SetFontSize- fixe la taille de la police
SetKeywords- définit les mots-clés associés au document
SetLeftMargin- fixe la marge gauche
SetLineWidth- fixe l'épaisseur des traits
SetLink- définit la destination d'un lien interne
SetMargins- fixe les marges
SetRightMargin- fixe la marge droite
SetSubject- définit le sujet du document
SetTextColor- définit la couleur du texte
SetTitle- définit le titre du document
SetTopMargin- fixe la marge haute
SetX- fixe la position x courante
SetXY- fixe les positions x et y courantes
SetY- fixe la position y courante
Text- imprime une chaîne Write- imprime du texte en mode flot Installation :
• Copier dans la racine
• Copier dans la racine le logo tutorial pb… Copier dans la racine les 2 fichiers tutorail/20k_c…
• Copier le dossier fonts
Exemple 1 : Premier PDF
require(''); $pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World !');
$pdf->Output();
require('');
class PDF extends FPDF{
function Header(){
//Logo
$this->Image('',10,8,33);
$this->SetFont('Arial','B',15);
//Décalage à droite
//Titre
$this->Cell(30,10,'Titre',1,0,'C');
$this->Ln(20);
}
function Footer(){
//Positionnement à 1,5 cm du bas
$this->SetY(-15);
$this->SetFont('Arial','I',8);
//Numéro de page
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
//Instanciation de la classe dérivée
$pdf=new PDF();
$pdf->AliasNbPages();
$pdf->AddPage(); $pdf->SetFont('Times','',12); for($i=1;$i<=40;$i++)
$pdf->Cell(0,10,'Impression de la ligne numéro '.$i,0,1); $pdf->Output();
require('');
class PDF extends FPDF{
function Header(){
global $titre;
$this->SetFont('Arial','B',15); | ||
$w=$this->GetStringWidth($titre)+6; | //Calcul de la largeur du titre et positionnement | |
$this->SetX((210-$w)/2); | ||
$this->SetDrawColor(0,80,180); $this->SetFillColor(230,230,0); $this->SetTextColor(220,50,50); | //Couleurs du cadre, du fond et du texte | |
$this->SetLineWidth(1); | //Epaisseur du cadre (1 mm) | |
$this->Cell($w,9,$titre,1,1,'C',1); $this->Ln(10); } function Footer(){ | //Titre centré | |
$this->SetY(-15); | //Positionnement à 1,5 cm du bas |
$this->SetFont('Arial','I',8);
$this->SetTextColor(128);
$this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C'); //Numéro de page
}
function TitreChapitre($num,$lib){
$this->SetFont('Arial','',12);
$this->SetFillColor(200,220,255); //Couleur de fond
$this->Cell(0,6,"Chapitre $num : $lib",0,1,'L',1); //Titre
$this->Ln(4);
}
function CorpsChapitre($fichier){
$txt=fread($f,filesize($fichier)); fclose($f);
$this->SetFont('Times','',12);
$this->MultiCell(0,5,$txt); //Sortie du texte justifié
$this->Ln();
$this->SetFont('','I');
$this->Cell(0,5,'(fin de l\'extrait)');
}
function AjouterChapitre($num,$titre,$fichier){
$this->AddPage();
$this->TitreChapitre($num,$titre);
$this->CorpsChapitre($fichier);
}
}
$pdf=new PDF();
$titre='Vingt mille lieues sous les mers';
$pdf->SetTitle($titre);
$pdf->SetAuthor('Jules Verne');
$pdf->AjouterChapitre(1,'UN ÉCUEIL FUYANT','');
$pdf->AjouterChapitre(2,'LE POUR ET LE CONTRE','');
$pdf->Output();
Libmail
<?php
include '';
$m= new Mail(); // create the mail
$m->From("");
$m->To(""); $m->Subject("test email");
ob_start(); echo "<pre>"; echo "test <br>"; $error = ob_get_contents(); ob_end_clean();
$message = "Nous vous adressons un message :<br><br>${error}<br><br>Merci de le régler au plus vite,<br>";
$m->Body($message);
$m->Send();
echo "****** MAIL ENVOYE ********"; return ;
Sans trop se préoccuper de la maquette, faire un projet pour un site de citations.
1) Créer la table citations avec
Citation, auteur, type (mort ou guerre)
2) Gérer un fichier RSS pour le flux.
3) Accueil avec trois liens : mort, guerre ou tout.
MORT
« Quand il s’agit d’un mortel, il faut attendre sa dernière journée avant de l’appeler heureux » (Sophocle)
« Pour bien aimer une vivante, il faut l’aimer comme si elle devait mourir demain » (Proverbe arabe)
« Une journée bien employée donne un bon sommeil; une vie bien employée procure une mort tranquille » (Léonard de Vinci, Carnets)
« La mort fait que l’on devient plus attentif à la vie » (Paulo Coelho, l’Alchimiste)
« Si un homme n’a pas découvert ce pour quoi il serait prêt à mourir, il n’est pas fait pour vivre » (Luther King)
« Qui apprendrait aux hommes à mourir, leur apprendrait à vivre » (Montaigne, Essais)
« Il faut choisir : savoir mourir ou ne pas vivre. Ceux qui craignent le plus la mort sont ceux qui n’ont jamais vécu. » (Raoul Follereau, Si le Christ demain )
“La vie, c'est le temps que nous mettons à mourir” (Pr Louis Vincent Thomas, anthropologue)
« Accomplis chaque acte de ta vie comme s’il devait être le dernier » (Marc Aurèle, Pensées)
« Ce n’est pas la mort qui est redoutable mais la mort avec déshonneurs » (Epictète, Entretiens)
« Meilleur l’homme, moins il craint la mort » (Samuel Johnson, Boswell's life)
« Tu ne meurt pas de ce que tu es malade; tu meurt de ce que tu es vivant » (Montaigne)
« Le drame avec la vie, c’est qu’on en sors pas vivant. Alors la vraie question, c’est de savoir comment on va mourir » (Michel Audiard)
"A long terme, nous serons tous morts" (Keynes)
GUERRE
« Une mort est une tragédie , un million de morts est une statistique… »
Joseph Stalin.
« Je pense que des gens seraient vivants aujourd'hui s'il y avait la peine de mort… »
Nancy Reagan.
« La manière la plus rapide de mettre fin à une guerre est de la perdre… »
George Orwell.
« J'ignore quelles armes seront utilisées dans la Troisième Guerre mondiale, mais la
Albert Einstein.
« La guerre, c'est une chose trop grave pour la confier à des militaires… »
Georges Clemenceau.
« La guerre est une série de désastres qui a pour résultat un vainqueur… »
Georges Clemenceau.
« La guerre est un jeu auquel on joue le sourire aux lèvres. Si vous n'arrivez pas à faire un sourire normal, faites un grand sourire. Si vous n'arrivez pas à faire un grand sourire, tenez-vous à l'écart jusqu'à ce que vous y arriviez… »
Winston Churchill.
« Etre prêt à la guerre est l'un des meilleurs moyens de préserver la paix… »
George Washington.
« La mort est une chose très ennuyeuse et consternante, et je ne peux que vous conseiller de ne pas y avoir affaire… »
W. Somerset Maugham.
« Un grand nombre de ceux qui vivent méritent de mourir. Et un grand nombre de ceux qui meurent méritent de vivre… »
J.R.R.Tolkien.
« Il reste enfin le plus ancien et le plus profond des désirs, la Grande évasion : l'évasion face à la mort… »
J.R.R.Tolkien.
« Quant à toi, Vie, je pense que tu es les restes de nombreuses morts, Je suis moi-même sûrement déjà mort dix mille fois… »
Walt Whitman.
« Les hommes sont en guerre les uns contre les autres car ils sont en guerre contre euxmêmes… »
Francis Meehan.
« Ce n'est pas que j'aie peur de mourir, c'est juste que je préférerais ne pas être là quand ça arrivera… »
Woody Allen.
« Il est difficile d'être patient avec ceux qui disent "La mort n'existe pas" ou "La mort n'a aucune importance". La mort existe, et ce qui existe a de l'importance… »
C.S.Lewis.
« La mort d'un homme concerne plus ceux qui lui survivent que lui-même »
Thomas Mann.
« Je ne crois pas en un destin qui frappe les hommes quels que soient leurs actes, mais je crois en un destin qui les frappe s'ils n'agissent pas »
G. K. Chesterton.
« Un homme qui refuse de mourir pour une cause, ne mérite pas de vivre… »
« Une fois la partie terminée, le roi et le pion retournent dans la même boîte… »
Proverbe italien.
« L'humanité doit mettre fin aux guerres, sans quoi les guerres mettront fin à l'humanité… »
John Fitzgerald Kennedy.
« Les guerres n'ont jamais fait de mal à personne, sauf à ceux qui meurent… »
Salvador Dali.
« Nous devons nous améliorer en remportant des victoires sur nous-mêmes. Il doit y avoir des affrontements, et nous devons gagner… »
Edward Gibbon.
« Dans la vie, comme à la guerre, nous ne réussissons qu'en choisissant un objectif unique et primordial et en assujettissant toutes les considérations à cet objectif… »
Dwight D. Eisenhower.
« L'expérience est un professeur cruel car elle nous fait passer notre examen avant de nous apprendre notre leçon… »
Vernon Sanders Law.
« Il vaut mieux tomber de tout son long vers l'avant que de se pencher en arrière trop loin… »
James Thurber.
« Le courage, c'est d'être mort de peur, mais de se mettre quand même en selle… »
John Wayne.
« La mort est plus universelle que la vie : tout le monde meurt, mais tout le monde ne vit pas… »
A. Sachs.
« On n'arrête pas le progrès. La preuve, c'est qu'à chaque guerre on se fait tuer par de nouvelles armes… »
Will Rogers.
« Un de ces jours, on organisera une guerre et personne ne viendra… »
Carl Sandburg.
« Heureusement que la guerre est si abominable, sans quoi nous risquerions de trop l'apprécier… »
Robert E. Lee.
« La guerre est l'un des fléaux que Dieu a décidé d'infliger aux hommes… »
Cardinal Richelieu.
« A la guerre, rien ne vaut la victoire… »
General Douglas MacArthur.
« La guerre ne permet pas de savoir qui a raison, mais uniquement qui survit »
Anders Russell.
« Le but de la guerre n'est pas de mourir pour son pays, mais de faire en sorte que ces bâtards d'ennemies meurent pour le leurs… »
General G. C. Patton
Lewis Carroll.
« Le soldat n'est pas homme de violence. Il porte les armes et risque sa vie, Pour des fautes qui ne sont pas les siennes. Son mérite est d'aller au bout de sa parole, tout en sachant qu'il est voué à l'oubli… »
A. de Saint-Exupéry.
« Tuez un homme, vous êtes un assassin; Tuez des milliers d'hommes, vous êtes un héros… »
Beilby Porteus.
« Aux yeux des fondateurs des grands empires, les hommes ne sont pas des hommes, ce sont des instruments… »
Napoléon 1er.
« Il y a des héros ; il n'y a pas de peuples de héros ; il n'y a pas d'armées de héros. Les soldats n'ont jamais marché que sous peine de mort… »
Anatole France.
« Les braves mourront ici, les lâches iront mourir en Sibérie… »
Davout à Eylau.
« Je ne connais qu'une seule chose qui soit plus gênant lors d'une guerre que d'avoir des alliés : c'est de ne pas en avoir… »
Wiston Churchill.
« J’étais trop faible pour me défendre, alors, j’ai attaqué… »
Robert E. Lee.
PHP 5 introduit la classe Exception avec des méthodes suivants :
Description :
getMessage() Get the message string that was passed to the constructor. getCode() Get the code integer that was passed to the constructor.
getFile() Get the file in which the exception was generated. getLine() Get the line number at which the exception was generated. getTrace() Get a multidimensional array tracing the method calls that exception, including method, class, file, and argument data. getTraceAsString() Get a string version of the data returned by getTrace(). __toString() Called automatically when the Exception object is used Returns a string describing the exception details.
PHP 5 permet d’utiliser le mecanisme de try/throw/catch
class SQLException extends Exception { public $problem; function __construct($problem) {
$this->problem = $problem;
} } try {
} catch (SQLException $e) { print "Caught an SQLException with problem $obj->problem";
} catch (Exception $e) { print "Caught unrecognized exception";
}
if ( xxx ) {
throw new Exception( "yyy" );
}
Métodos :
__get( $property ) Invoked when an undefined property is accessed
__set( $property, $value ) Invoked when a value is assigned to an undefined property
__isset( $property ) Invoked when isset() is called on an undefined property
__unset( $property ) Invoked when unset() is called on an undefined property
__call( $method, $arg_array ) Invoked when an undefined method is called
function __construct( $file ) {
$this->file = $file; if ( ! file_exists( $file ) ) {
throw new Exception( "file '$file' does not exist" );
}
$this->xml = simplexml_load_file($file);
}