Quelques mémos sur le PHP

Afficher les messages d'erreurs

Si le fichier "/etc/php5/apache2/php.ini" est bien configuré, ce qui devrait être le cas lors d'une installation par défaut, ajouter ces lignes au début d'un script php:

error_reporting(E_ALL);
ini_set('display_errors', 1);

index.php

Un fichier à placer dans les répertoires ne nécessitants pas un accès directe.

<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

header("Location: ../");
exit;

Expressions simplifiées

Une condition if/else classique ...

if($a == 1){
    $t = 'vrai';
}else{
    $t = 'faux';
}

... peut être simplifié ainsi:

$t = $a == 1 ? 'vrai':'faux';

Si la condition qui se trouve avant le ? est vérifiée alors $t = la valeur située avant le : sinon $t = la valeur qui se trouve après le caractère :.
En d'autres termes:

$t = (condition) ? true:false;

Échappement depuis du HTML

Balises d'ouvertures et de fermetures PHP

<? echo 'Un peu de texte et des '.$variables.'<br />'; ?>

ou

<?= 'Un peu de texte et des '.$variables.'<br />'; ?>

Échappement avancé if, else, for, foreach

...
<ul>
     <?php
     $tableau = array('cell1','cell2','cell3');
     foreach ($tableau as $value): ?>
          <li><?= $value; ?></li>
     <?php endforeach; ?>
</ul>
...

ou encore


<?php if($var == "variables"): ?> <span style="color:blue";>Il y a plusieurs variables (pluriel)</span> <?php elseif($var == "variable"): ?> <span style="color:green";>Il n'y a qu'une seule variable (singulier)</span> <?php else: ?> <span style="color:red";>Il ne sagit pas d'une variable!</span> <?php endif; ?>

Upload de fichier

<?php

$errorsMsg = array(
    0 => 'Transfère réalisé avec succès!',
    1 => 'Le fichier est plus gros que le permet la directive <b>"upload_max_filesize"</b> de php.ini.',
    2 => 'Le fichier est plus gros que le permet la directive <b>"MAX_FILE_SIZE"</b> du formulaire.',
    3 => 'Le fichier n\'a été que partiellement téléchargé.',
    4 => 'Aucun fichier trouvé.',
    6 => 'Un dossier temporaire est manquant.',
    7 => 'Impossible d\'écrire sur le disque.',
    8 => 'Une extension PHP a stoppé le transfère. L\'examen de phpinfo() peut vous aider à identifier cette extension.',
);

?>

<!doctype html>
<html lang="fr">
<head>
    <meta charset="utf-8">
</head>
<body>

     <form method="post" action="<?= $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
          <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
          <input type="file" name="fichier" id="fichier" /><br />
          <input type="submit" name="submit" value="Envoyer" />
     </form>

<?= '<pre>'.print_r($_FILES['fichier'],true).'</pre>'; ?>
<?= $errorsMsg[$_FILES['fichier']['error']]; ?>

</body>
</html>

spl_autoload_register

Créer simplement un chargeur de classes PHP avec spl_autoload_register.

Structure

A la racine d'un serveur web supposons l'arborescence suivante:

classes/

bootstarp.php
index.php

Le répertoire "classes" contiendra tous les fichiers "nom.class.php", pour l'exemple il contiendra un fichier nommé Test.class.php qui sera appelé lors de la création d'un objet par la page index.php.

bootstrap.php

<?php
    spl_autoload_register('app_autoload');

    function app_autoload($class){
    require "classes/$class.class.php";
    }

Ou, en utilisant une fonction anonyme (à partir de PHP 5.3.0)

<?php
    spl_autoload_register(function ($class) {
        require "classes/$class.class.php";
    });

index.php

<?php 
    require_once 'bootstrap.php';
    $objet = new Test();
^