var Phenix = function () {
Troll du Web depuis 1996

PHP

Éxecuter du code quand une commande est payée

Lorsque l’on utilise le plugin commande et que l’on souhaite exécuter une peu de code lorsqu’une commande est payée, il suffit d’utiliser ce petit pipeline :

  1. function prefixe_post_edition($flux) {
  2. if ($flux['args']['table'] == table_objet_sql('commande')
  3. and $flux['args']['action'] == 'instituer'
  4. and $flux['args']['statut_ancien'] == 'encours'
  5. and $flux['data']['statut'] == 'paye'
  6. ) {
  7. $id_commande = $flux['args']['id_objet'];
  8. // Coder ici
  9. }
  10. return $flux;
  11. }

Un serveur de mail local pour le développement web

Sous Ubuntu 16.04 ou LinuxMint 18.1

Petite astuce pour avoir un serveur de mail local, qui renvoie tous les mails envoyés par PHP (ou autre) vers username@localhost.

La première chose est d’installer le serveur d’envoi, postfix :

  1. sudo apt install postfix

Il est possible qu’il soit déjà installé, mais pas spécialement bien configurer, pour être certain, il vaut mieux le reconfigurer :

  1. sudo dpkg-reconfigure postfix

Sélectionnez l’option Local uniquement et laisser toutes les autres options par défauts.

Ensuite, j’ai fait une petite page php de test :

  1. <?php
  2.  
  3. mail('username@localhost', 'test', 'test');

L’envoie du mail devrait alors créer un fichier dans /var/mail/username. Vérifiez que tout ce passe bien :

  1. more /var/mail/username

Vous devriez avoir quelques choses comme ceci dans votre terminal :

From phenix@Thanatos.localdomain  Thu Jun  1 17:23:07 2017
Return-Path: <phenix@Thanatos.localdomain>
X-Original-To: phenix@localhost
Delivered-To: phenix@localhost.localdomain
Received: by Thanatos.localdomain (Postfix, from userid 1000)
        id CF2F385652; Thu,  1 Jun 2017 17:23:07 +0200 (CEST)
To: phenix@localhost.localdomain
Subject: test
X-PHP-Originating-Script: 1000:test_mail_local.php
Message-Id: <20170601152307.CF2F385652@Thanatos.localdomain>
Date: Thu,  1 Jun 2017 17:23:07 +0200 (CEST)
From: phenix@Thanatos.localdomain (phenix)

test

J’ai laissé les valeurs de ma machine, ce sera sans doute différent sur la vôtre.

On peut ensuite configurer Thunderbird pour lire cette boite mail. J’utilise la version 52.1.1.

Fichier > Nouveau > Autres comptes...

Configurez une Unix Mailspool (Movemail).

Voilà, Thunderbird va lire la boite locale.

Rediriger tous les mails vers usename@local

L’idée de base est de recevoir tous les mails envoyés par le serveur dans cette boite, afin de débugger facilement.

On va éditer la configuration de postfix dans le fichier /etc/postfix/main.cf pour y ajouter :

  1. virtual_alias_maps = pcre:/etc/postfix/virtual

Créer ensuite le fichier /etc/postfix/virtual et placez y le code suivant :

  1. /.*@.*/ username

Il faudra également installer le paquet postfix-pcre :

  1. sudo apt install postfix-pcre

Voilà, tout le trafic mail du serveur va aller dans votre boîte mail locale ! Beaucoup plus pratique pour débugger l’envoie de mail de vos applications :) !



Anti-hack des arguments

  1. //-- anti hack des arguments --------------------------------------
  2. function check_arg($key,$type='s',$pardefaut='',$len=80) {
  3.  
  4. // change l'odre de $_REQUEST[$key]
  5.  
  6. if($key=="email") {
  7. if(isset($_GET[$key] )) { $arg = $_GET[$key]; }
  8. else {
  9. if(isset($_POST[$key] )) $arg = $_POST[$key];
  10. else
  11. if(isset($_COOKIE[$key] )) $arg = $_COOKIE[$key];
  12. else if(isset($_SESSION[$key] )) $arg = $_SESSION[$key];
  13. else $arg=$pardefaut;
  14. }
  15. }
  16. else {
  17. if(isset($_REQUEST[$key])) $arg = $_REQUEST[$key];
  18. else $arg=$pardefaut;
  19. }
  20.  
  21. switch ($type) {
  22. case 's': // string
  23. $arg = substr($arg,0,$len);
  24. break;
  25. case 'sd': // string database
  26. $trans = array("%" => "", "," => "", ";" => ""); // anti hack db
  27. $arg = trim(strtr(substr($arg,0,$len),$trans));
  28. break;
  29. case 'n': // nombre
  30. $arg = $arg + 0;
  31. default:
  32. $arg = trim($arg);
  33. }
  34.  
  35. return($arg);
  36. }

Si quelqu’un comprend ce qui ce passe, qu’il n’hésite pas à m’éclairer...

Mention spécial pour ce passage :

  1. $trans = array("%" => "", "," => "", ";" => ""); // anti hack db
  2. $arg = trim(strtr(substr($arg,0,$len),$trans));

Worlpress...

  1. include_once("config.php");
  2. $config['run_include'] = ""; // execution pas inclus dans worldpress
  3. include_once("mlist.php");

Non, je sais que Wordpress a une grosse part du marché des CMS, mais quand même...