H2 - P2019

Développement web

Cours 26 - 2016-03-21

PHP

En vrac

Envoyer des mails

La fonction mail() de PHP permet d'envoyer des emails

Ne fonctionne pas toujours par défaut en localhost

Exemple


$to      = 'toto@domain.com';
$subject = 'Subject';
$message = 'Hello !';
$headers = 'MIME-Version:1.0'."\r\n".
           'From:server@domain.com'."\r\n";

mail($to,$subject,$message,$headers);
                    

Destinataires


// Destinataire unique
$to = 'toto@domain.com';

// Plusieurs destinataires
$to = 'toto@domain.com, tata@domain.com';

// Plusieurs destinataires nommés
$to = 'Toto <toto@domain.com>, Tata <tata@domain.com>';

                    

Subject


// Classique
$subject = 'Subject';

// Forcer l'encodate UTF-8
$subject = '=?UTF-8?B?'.base64_encode('Subject éèêùà').'?=';
                    

Message


// Text
// \r\n permet d'aller à la ligne et ne fonctionne qu'avec les doubles quotes
$message = "Salut,\r\n"; 

// HTML
// Ne fonctionnera pas sans les bons headers
$message = '<strong>Salut</strong><br />Ça va ?';
                    

Headers


// Les valeurs sont séparées par des \r\n entre double quotes

$headers  = 'MIME-Version:1.0'."\r\n";                       // Email content type system (?)
$headers .= 'From:server@domain.com'."\r\n";                 // Classique
$headers .= 'Reply-To:server@domain.com'."\r\n";             // Reply to
$headers .= 'Cc:tutu@domain.com'."\r\n";                     // Cc
$headers .= 'Bcc:tete@domain.com'."\r\n";                    // Bcc
$headers .= 'Subject:subject@domain.com'."\r\n";             // Subject
$headers .= 'Content-type:text/html;charset=utf-8'."\r\n";   // Contenu HTML
$headers .= 'Content-Type:text/plain;charset=ISO-8859-1'."\r\n"; // Contenu text
                    

Headers

La fonction header() de PHP permet de modifier l'entête d'une page

Cette fonction doit être appelée avant que le moindre contenu soit envoyé (comme session_start et setcookie)

Il est possible de déclencher une redirection avec 'Location'


header('Location:http://www.google.com/');
exit;
                    

Ne pas oublier de mettre un exit ou un die() car le reste du code sera exécuté même si l'utilisateur est redirigé

Il est possible de spécifier le code HTTP de la page
(200, 401, 404, ...)


header('HTTP/1.0 404 Not Found');
exit;
                    

Liste des codes

  • 2XX : Success
  • 3XX : Redirection
  • 4XX : Client error
  • 5XX : Server error

Les plus connus :

  • 200 : Ok
  • 301 : Moved Permanently
  • 401 : Unauthorized
  • 403 : Forbidden
  • 404 : Not found
  • 418 : I'm a Teapot
  • 500 : Server error

cURL

cURL est une librairie PHP permettant de se connecter à d'autres serveurs

Elle se traduit par plusieurs fonctions PHP commençant toutes par curl_

Elle est disponible de base sur la majorité des configurations

Exemple


// Initialise une instance de curl
$ch = curl_init();

// Configure la requête
curl_setopt($ch,CURLOPT_URL,'http://www.google.fr/');

// Exécute la requête et echo le résultat
curl_exec($ch);

// Fermeture de la session cURL
curl_close($ch);
                    

Options

curl_setopt() permet de définir les différentes options

  • CURLOPT_URL : Indique l'URL de la requête
  • CURLOPT_FOLLOWLOCATION : Donne pour consigne de suivre les redirections
  • CURLOPT_HEADER : Indique si la requête doit renvoyer les entêtes

Options

  • CURLOPT_POST : Indique si la requête est en POST
  • CURLOPT_POSTFIELDS : Indique les paramètres à envoyer en POST
  • CURLOPT_USERAGENT : Indique le user agent
  • CURLOPT_COOKIE : Indique les cookies
  • CURLOPT_RETURNTRANSFER : Indique si curl doit renvoyer le resultat ou l'afficher directement

Exemple d'options


$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,'http://www.google.com/');
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,'toto=tata&test=1');
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A4449d Safari/9537.53');
curl_setopt($ch,CURLOPT_COOKIE,'tete=tutu;test=2');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

$result = curl_exec($ch);
curl_close($ch);
                    

Constantes magiques

PHP fournit des constantes magiques dont les valeurs change selon l'endroit où elles sont appelées

It's magic


echo __LINE__; // Ligne
echo '
'; echo __FILE__; // Fichier echo '
'; echo __DIR__; // Dossier du fichier

function ma_fonction()
{
    echo __FUNCTION__;
}

ma_fonction();
                    

class Ma_Class
{
    public function __construct()
    {
        echo __CLASS__;
    }
}

$class = new Ma_Class();
                    

Fichiers

En PHP, il existe une large quantité de fonctions permettant de manipuler les fichiers. Il est possible de les créer, de les lire, de les modifier, de les supprimer, de les lister, d'obtenir la date de création/modification, de changer les droits d'accès, etc.

dirname() permet d'extraire le chemin vers le dossier


echo dirname(__FILE__);
                    

glob() renvoie un tableau de chemins verifiant un masque (ou pattern)


$dir   = dirname(__FILE__);
$files = glob($dir.'/*');
                    

$files contient la liste de tous les fichiers dans le repertoire courant

file_get_contents() récupère le contenu d'un fichier


$path    = 'monfichier.txt';
$content = file_get_contents($path);
                    

file_put_contents() ajoute du contenu au fichier

Par défaut, elle va remplacer le contenu existant

Si le fichier n'existe pas, elle va le créer


// Remplace le contenu du fichier monfichier.txt
$path = 'monfichier.txt';
file_put_contents($path,'test 1234');

// Ajoute le contenu à la fin du fichier monfichier.txt
$path = 'monfichier.txt';
file_put_contents($path,'test 1234',FILE_APPEND);
                    

file_exists() test si le fichier existe


$path = 'monfichier.txt';

if(file_exists($path))
    echo 'le fichier existe';
else
    echo 'le fichier n\'existe pas';
                    

unlink() supprime le fichier


$path = 'monfichier.txt';
unlink($path);
                    

Une liste de fonctions PHP permettent de manipuler les fichiers tout comme nous l'avons fait jusqu'à présent mais avec moins d'automatismes et plus de flexibilité

exemple avec fopen / fwrite / fclose


$path = 'monfichier.txt';
$fp   = fopen($path,'a+');
fwrite($fp,'hey');
fclose($fp);
                    

Math

PHP intègre un grand nombre de fonctions mathématiques

  • abs : valeur absolue
  • round : arrondi
  • ceil : arrondi au dessus
  • floor : arrondi en dessous
  • min : valeur minimal
  • max : valeur maximal
  • rand : valeur aléatoire

echo abs(-10);           // 10
echo round(2.4);         // 2
echo ceil(2.4);          // 3
echo floor(2.6);         // 2
echo min(1,-2,999,3,10); // -2
echo max(1,-2,999,3,10); // 999
echo rand(0,9);          // 0 ou 1 ou 2 ou 3 ou ...
                    

JSON

Il est possible de convertir une donnée (tableau ou objet) en JSON avec la fonction json_encode()


$user = array(
    'name'  => 'Toto',
    'age'   => 26,
    'admin' => false
);

$user_json = json_encode($user); // {"name":"Toto","age":26,"admin":false}

                    

JSON

Cette donnée peut ensuite être utilisée pour l'intégrer au javascript


<?php
$user = array(
    'name'  => 'Toto',
    'age'   => 26,
    'admin' => false
);

$user_json = json_encode($user); // {"name":"Toto","age":26,"admin":false}
?>
                    

<script>
    var user = <?= $user_json ?>;
    console.log(user);
</script>
                    

Arrays

Il existe un très grand nombre de fonctions pour gérer les tableaux

  • count : Compte tous les éléments d'un tableau ou quelque chose d'un objet
  • array_pop : Dépile un élément de la fin d'un tableau
  • array_unshift : Empile un ou plusieurs éléments au début d'un tableau
  • array_shift : Dépile un élément au début d'un tableau
  • array_push : Empile un ou plusieurs éléments à la fin d'un tableau
  • array_search : Recherche dans un tableau la clé associée à une valeur
  • array_merge : Fusionne plusieurs tableaux en un seul
  • in_array : Indique si une valeur appartient à un tableau
  • array_key_exists : Vérifie si une clé existe dans un tableau

PhpInfo

La fonction phpinfo() permet d'afficher une grande quantité d'informations liées à l'environnement PHP


phpinfo();