jeudi 6 juin 2013

Mémento des commandes Exim les plus utiles

Quelques commandes d'administration bien utiles quand on utilise Exim comme MTA sur un serveur :
  • eximstats fichierdelog
    Donne des statistiques sur les messages reçus, envoyés, relayés, etc par Exim.
  • exim -bp
    Permet de voir les messages actuellement dans la file d'attente. On peut utiliser cette commande combinée avec exiqsumm pour obtenir une vue plus synthétique (exim -bp | exiqsumm).
  • exim -Mrm identfiantdemessage
    Efface de la file le message désigné par son identifiant. Ce dernier peut être obtenu par la commande ci dessus.
  • exiqgrep
    Permet de faire des recherches dans la file des messages. L'utilisation la plus courante à mon avis est de vider totalement cette file avec exiqgrep -i | xargs exim -Mrm

samedi 1 juin 2013

Evolution de register_globals selon les versions de Php

Register_globals est (était) la directive de configuration de Php qui permettait la transformation automatique en variables Php des paramètres de la requête http, qu'elle utilise la methode GET ou POST.

Si l'on considère le script helloyou.php ci dessous :

<?php
  print "Hello $Name";
?>
Avec registers_globals à On, ce script va afficher Hello Martin si on l'appelle par la requête http://helloyou.php?Name=Martin.

Par contre, avec register_globals à Off, ce même script appelé de la même façon va juste afficher Hello car le paramètre Name passé dans la requête n'aura pas été transformé en variable.

Pour retrouver le fonctionnement voulu sur un serveur où register_globals vaut Off, il faut utiliser les tableaux superglobaux pour transformer le script de la façon suivante :

<?php
  $Name=$_GET['Name'];
  print "Hello $Name";
?>
On affecte ainsi manuellement et volontairement la valeur du paramètre Name de la requête à la variable $Name.
Le fonctionnement est identique pour la transmission en POST des données d'un formulaire si ce n'est qu'il faut utiliser
$Name=$_POST['Name'];
pour affecter leurs valeurs aux variables.

On comprend donc qu'un script développé selon la toute première méthode ne pourra pas fonctionner tel quel sur un serveur avec register_globals à Off.

Le problème est que ce style de programmation était fréquent avec les anciennes versions de Php pour lesquelles la directive register_globals valait On par défaut.
Depuis la version 4.2 de Php, la valeur par défaut de cette directive est Off mais jusqu'à la version 5.3 comprise il est encore possible de la modifier à l'aide de php.ini ou d'un fichier .htaccess.

Depuis la version 5.4, Php ne laisse plus aucune possibilité de configuration de register_globals et se comporte toujours comme si sa valeur était toujours Off.