Astuces pour les scripts Shell

Vous êtes peut être comme moi, vous utilisez PHP pour faire des scripts shell. J’utilise une petite astuce pour mettre en place des variables dans mes scripts en reprennant la syntaxe qu’on utilise sous linux avec « –var value »

un petit include que vous pouvez transformez en fonction comme bon vous semble.

for($i=1;$i<sizeof($argv);$i++)
{
 if (substr($argv[$i],0,2)=="--")
 {
 		$_REQUEST[substr($argv[$i],2)]=$argv[$i+1];
 		$i++;
 }
}
 
extract($_REQUEST);

Comme ca quand je lance « mon_script.php –code TE –mode debug »

c’est comme si je faisais :

$code="TE";
$mode="debug";

Ca n’interessera peut être pas tout le monde mais c’est bien pratique !

Filtrons les entrées

Afin de sécuriser au maximum vos sites, la première règle est de bien faire attention aux entrées utilisateurs. Cette partie peut être un peu fastidieuse mais c’est une des règles à respecter.

Les 3 règles les plus importantes :

  1. Initialiser vos variables utilisées dans la page.
  2. Vérifiez les variables rentrées par l’utilisateur.
  3. Vérifiez l’entrée des fonctions include / require fichiers.

La question c’est donc comment verifier vos variables simplement et efficacement.

Avant PHP 5.2, chacun avait sa propre recette de cuisine car il n’y avait aucune veritable solution dans PHP alors que tout le monde disait que c’était très important surtout suite aux nombreuses alertes qu’on voyait fleurir sur des logiciels Open Source.

Depuis PHP 5.2, l’extension filter (disponible jusqu’alors via PECL) a été inclus dans la distribution standard.

Cette extension est très pratique, elle permet par exemple de valider une adresse email sans se prendre la tête avec les dizaines d’expressions regulières que vous verez ici ou là sur Internet.

$email='nimportequoiyahoo.fr';
  $email=filter_var($email, FILTER_VALIDATE_EMAIL);
//$email est à null car l'adresse est incorrecte
$email='bonneadresse@bondomaine.com';
$email=filter_var($email, FILTER_VALIDATE_EMAIL);
//$email vaut "bonneadresse@bondomaine.com"

A retenir, on met la variable en premier argument et le filtre qu’on veut appliquer en deuxième.
Si cela retourne « null », la variable n’est pas correcte sinon elle est correcte.

Aprés on peut faire des choses plus complexe, l’utilisateur doit rentrer un entier entre 1 et 10

$categorie=filter_var($_GET['categorie'],
  array(
            //je veux uniquement un entier
            'filter'    => FILTER_VALIDATE_INT,
            //il doit etre compris dans un tableau
            'flags'     => FILTER_REQUIRE_ARRAY,
            //entre 1 et 10
            'options'   => array(
						   'min_range' => 1,
							 'max_range' => 10
							 )
           ));

Aprés dans la vie de tous les jours, vous aimeriez filtrer l’ensemble de votre formulaire en une seule fois :

// je decris mon formulaire sous forme de tableau
// avec les format attendu
$config_form = array(
    'produit'   => FILTER_VALIDATE_INT,
    'categorie'    => array('filter'    => FILTER_VALIDATE_INT,
                            'flags'     =>FILTER_REQUIRE_ARRAY,
                            'options'   => array('min_range' => 1, 'max_range' => 10)
                           )
);
 
$_POST_CLEAN = filter_input_array(INPUT_POST, $config_form);
//je recupére ainsi dans $_POST_CLEAN tout ce qui était
//dans $_POST mais maintenant les données sont
//filtrées.

A vous de jouer !

Et si MySQL était mort ?

Une chose assez importante auquel les développeurs ne pensent pas tout le temps : Avez vous verifié si votre serveur MySQL fonctionne correctement ? Est-ce que la fonction mysql_connect / mysqli_connect ne renvoit pas false ?

Je pense que beaucoup oublie cet étape, c’est comprehensible dans l’euphorie du développement. J’ai fait une petite requète sur Google et je vois tout simplement 734000 pages avec une erreur qui découle de ce problème…

C’est pas bien compliqué, il faut juste y penser !

$my=mysql_connect(...,...,...);
if ($my===false)
{
  header("location: /mysql_out.php");
  // a la rigueur on envoie un petit mail au webmaster pour le mettre au courant
  mail(...,...,...,...);
  exit;
}

Allez je referai un petit point de temps en temps pour voir si ce nombre (734 000 pages sur Google) baisse un peu !

Objet PHP : attention au __destruct

Dans la bible des erreurs à éviter car elles peuvent prendre la tête : la fonction __destruct sur un objet PHP.

Il faut être trés vigilent, en effet, cette fonction est appellé même après un exit, donc on peut avoir un état en base de donnée juste avant exit qu’on vient de verifier par un dump.

Et se retrouver après exit  avec un état différent, effectivement la fonction exit appelle tous les destructeurs des objets en mémoire.

Web 2.0 : Construire son propre site de video

Dans le web 2.0, il faut de l’ajax mais il faut aussi pouvoir concurrencer les Youtube et autres Dailymotion

Pour ca, je vous propose de mettre en place uniquement avec des outils Open Source, votre propre site de vidéo. Vous aurez besoin de quelques connaissances :

  • Linux (Debian)
  • Shell
  • LightHttpd
  • PHP

Tous les détails dans cet article

Aprés à vous de mettre en place sur votre site Web.

Il vous restera plusieurs petites choses techniques à gérer :

  • Le formulaire d’upload, 3 pistes :
    1. Un formulaire classique
    2. Utilisation de JUploadr (Applet Java)
    3. Utilisation de la barre progressive PECL
  • La gestion du volume de vidéo (espace disque)

Ajax / PHP : Trucs et Astuces #1

Le tips le plus important est de trouver le bon framework, personnellement j’utilise principalement Prototype.

Un exemple tout simple pour mettre a jour un div par le contenu d’un page php

/*
fonction qui permet de charger le html renvoyé
par /ajaxdiv/contenu.php?isajax=1
dans le div page_contenu
*/
function litContenu()
{
  //parametre pour la page
  var pars = 'isajax=1';
  //object utilisé pour la mise à jour
  var myAjax = new Ajax.Updater(
    //identifiant du div à mettre à jour
    'page_contenu',
    //url
    '/ajaxdiv/contenu.php',
    {
      parameters: pars,
      method: 'get',
    });
}

MySQL : On Duplicate Key UPDATE

Une problématique régulière sur un site consiste à mettre a jour des données. Parfois la donnée existe déjà et parfois elle n’existe pas.

Vous pouvez utiliser REPLACE mais le REPLACE est simplement un DELETE suivi d’un INSERT.

Exemple :

Je recois régulièrement les données d’une station météo. Parfois je recois la température, d’autre fois je recois l’humidité…si j’utilise REPLACE quand je mets à jour la température, je vais perdre l’humidité de la station X (X etant ma clé primaire, ma table comporte une ligne par station)

Deux méthodes sont possible :

  1. Je fais un SELECT pour savoir si la station a déjà des données et ensuite je fais soit un INSERT soir un UPDATE.
  2. J’utilise ON DUPLICATE KEY : INSERT INTO donnee_station SET temperature=15, station=’Nancy’ ON DUPLICATE KEY UPDATE temperature=15;

L’avantage de la deuxième méthode : cela réduit le code et je ne fais qu’une requete (meme si au niveau du serveur il en execute 2 :il essaye de faire INSERT si il recoit l’erreur Duplicate key Entry il fait UPDATE)

En résumé c’est plus facile est plus propre.

References:



Check out our best movie collection. Latest CD, DVD, HQ DVD movie downloads. Buy and download movies instantly.