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

PHP

Un serveur de mail local pour le développement web

Sous Ubuntu 16.04 ou LinuxMint 18

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. 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...


Un moteur de recherche dans les catégories #Wordpress

Avoir un petit moteur de recherche pour les articles d’une catégorie Wordpress est en fait assez simple, pas besoin de ce lancer dans une chasse aux plugins.

Cela ne demande qu’un petit formulaire à mettre dans le template de catégorie.
Si vous n’avez pas envie de l’avoir dans toutes les catégories, vous pouvez simplement créer un template category-(slug ou ID).php.

  1. <form action="./" method="get">
  2.         <input name="search" type="text" value="<?php echo $_GET['search']; ?>" placeholder="Recherche" />
  3.         <input type="submit" value="Recherche"/>
  4. </form>

Et ensuite une petite WP_Query qui va faire tout le boulot :

  1. <?php
  2. $args = array(
  3. 's' => ($_GET['search']) ?: null, // Un opérateur Elvis, parce que c'est cool !
  4. 'cat' => $cat // L'ID de la catégory
  5. );
  6. $query = new WP_Query( $args );
  7.  
  8. while ( $query->have_posts() ) : $query->the_post();
  9. get_template_part( 'content', 'single' ); // A vous d'avoir un template pour afficher tout ça hein !
  10. endwhile;
  11. wp_reset_postdata();

Rien de sorcier donc, et surtout pas de faille de sécurité plugin usine à gaz d’installer pour faire ce formulaire.