Catégorie : Programmation.

PHP : Donner du style à print_r et var_dump !

Quel développeur PHP n’a jamais utilisé les fonctions print_r et var_dump ? Mais le problème avec ces fonctions c’est que dès que l’on affiche des objets/tableaux/etc… super longs on se retrouve avec un affichage qui donne parfois envie de se jeter par la fenêtre (pas Windows, hein !) la tête la première. Est-ce que présentée de la façon ci-dessous, un objet ne vous donnerait-il pas moins de maux de tête ?

Pour vous aider dans vos phases de débogage, il existe un outil formidable qui s’appelle Krumo. Les développeurs Drupal qui ont déjà utilisé Devel et/ou Devel Themer connaissent forcément Krumo. En passant, je remercie un certain Thomas (il se reconnaitra sûrement) qui m’a fait découvrir les fonctions de Krumo et en creusant quelque peu je suis tombé sur le site du projet.

Il suffit juste d’inclure la fichier class.krumo.php, de paramétrer si besoin le fichier krumo.ini et de profiter de Krumo.

Krumo sur SourceForge.

PHP : Chaîne et réécriture d’URL.

Chaîne de l'Himalaya

Bon on en trouve pas mal de fonctions sur la toile qui permettent de transformer une chaîne de caractères dans un format adapté à la réécriture d’URL, URL rewriting en anglais pour ceux qui arrivent à le prononcer avec l’accent. Mais celle que je vais vous présenter emploie les expressions régulières et des fonctions qui prennent en compte l’UTF-8.

La fonction

function url_rewriting($str) {
  $str = str_replace('&', 'et', $str);

  // On convertit la chaîne en UTF-8 si besoin est.
  if($str !== mb_convert_encoding(mb_convert_encoding($str,'UTF-32','UTF-8'),'UTF-8','UTF-32')) {
      $str = mb_convert_encoding($str,'UTF-8');
    }

  $str = htmlentities($str, ENT_NOQUOTES ,'UTF-8');

  // Quelques entités à remplacer par les lettres correspondantes.
  $str = preg_replace('`&([a-z]{1,2})(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i','$1',$str);

  $str = preg_replace(array('`[^a-z0-9]`i','`[-]+`'),'-',$str);
  return strtolower(trim($str,'-'));
}

Bon pour ceux qui n’auraient pas compris, l’Image c’est l’Himalaya… Une chaîne… De montagnes ! Bon ben… Voilà c’est tout pour ce tuto, et n’oubliez surtout pas : BI-DOU-ILLEZ !

Source : Image.

PHP : Tronquer un texte.

Image de ciseaux

Aujourd’hui je vous présente une petite fonction qui sert à tronquer un texte. Ça peut servir pour afficher un aperçu par exemple dans vos flux RSS ou encore pour ceux qui utilisent un blog où les articles sont tronqués à l’accueil. Bref pour ce que vous voulez… C’est une fonction que j’ai trouvé sur le net et que j’ai modifié pour ne pas découper les mots.

Paramètres

$text

Le texte à tronquer, ça c’était facile à deviner…

$count

Le nombre de caractères que l’on veut afficher.

$suffix

Une chaîne à afficher après le texte tronquer comme trois points de suspensions ou encore un lien vers la suite du contenu.

function xwords($text, $count, $suffix = "") {
  if (strlen($text) >= $count) {
    $text = substr($text, 0, $count);
    $space = strrpos($text, " ");
    if ($space) {
      $text = substr($text, 0, $space);
    }
  }
  return $text.$suffix;
}

Voilà c’est tout pour ce tuto, et n’oubliez surtout pas : BI-DOU-ILLEZ !

La fonction class_alias pour PHP < 5.3.0.

Logo PHP, http://static.php.net/www.php.net/images/php.gif, transformé en PNG.

Avant PHP 5.3.0, la fonction class_alias PHP n’existe pas mais il est possible de la créer soi-même. Pour ceux qui ne savent pas à quoi sert cette fonction, comme son nom l’indique elle permet de créer un alias pour une classe. J’ai trouvé cette fonction dans les notes de contribution de la doc PHP.

Mais quelle utilité ?

Vous avez une classe avec un nom super long, Class_Avec_Un_Nom_Super_Long par exemple, et vous en avez marre de devoir vous le coltiner à longueur de clavier… Et bien voilà à quoi sert cette fonction va vous permettre de l’appeler C par exemple.

Le code

On vérifie d’abord que la fonction n’est pas présente dans la version de PHP qu’on utilise moyennant un joli message d’erreur, d’où la structure conditionnelle… le if quoi ! ;-)

// La fonction à proprement parler :
if (!function_exists('class_alias')) {
  function class_alias($original, $alias) {
      eval('class ' . $alias . ' extends ' . $original . ' {}');
  }
}

// Exemple d'utilisation :
class_alias("Class_Avec_Un_Nom_Super_Long", "C");
// Au lieu de :
$class = new Class_Avec_Un_Nom_Super_Long();
// On peut maintenant faire :
$class = new C();

Voilà c’est tout pour ce tuto, et n’oubliez surtout pas : BI-DOU-ILLEZ !

Source : PHP.net.

PHP : Vérifier le format d’une adresse email.

Icône courrier

Un truc que j’aime bien en programmation, ce sont les expressions régulières. On peut notamment vérifier si le format d’une adresse email est bon. Dans l’absolu, ça ne vous dit pas si l’adresse existe vraiment. Pour cela il n’y a pas de solution miracle. Je vous présente donc une petite fonction qui vous permettra de vérifier la validité d’une adresse email :

function is_email($email) {
  $str   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';
  $domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';
  $pattern = '/^'.$str.'+'.'(\.'.$str.'+)*'.'@'.'('.$domain.'{1,72}\.)+'.$domain.'{2,72}$/i';
  return preg_match($pattern, $email);
}

Voilà c’est tout pour ce tuto, et n’oubliez surtout pas : BI-DOU-ILLEZ !

Lancer une commande shell depuis PHP

Icone d'un terminal, shell.

Dans ce tutoriel nous allons voir comment exécuter une commande via le Shell à partir de PHP. Une petite recherche google vous démontrera que cette question intéresse pas mal de monde. Pourtant il existe une fonction PHP qui fait cela très bien : shell_exec.

Attention à ne pas faire n’importe quoi avec cette fonction ! Il est très important que vous relisiez vos script avant de les exécuter sous peine d’endommager votre système même si de mon expérience, j’ai constaté que les commandes les commandes qui requièrent les droits root ne sont pas exécutées.

Désactiver le safe_mode.

Pour les versions de PHP antérieures à PHP 5.3.0, il faut que le safe_mode soit désactivé. Cherchez dans votre php.ini (/etc/php5/apache2/php.ini pour Ubuntu) la ligne où il y safe_mode ou ajouter-la si elle n’existe pas.

safe_mode = Off

Redémarrez votre serveur Apache /etc/init.d/apche2 restart en tant que root et ce devrait être fonctionnel. Depuis PHP 5.3.0, cette fonctionnalité est obsolète.

Lancer une ou plusieurs commandes avec ou sans sortie.

Lancer une simple commande :

shell_exec("touch example.txt");

Si votre commande implique une sortie :

print shell_exec("ls example/");

ou encore mieux :

print "<pre>".shell_exec("ls example/")."</pre>";

Il est possible d’exécuter plusieurs commandes à la fois avec && ou en allant à la ligne :

print "<pre>".shell_exec("echo 'Test 1' > example1.txt && chmod 777 example1.txt")."</pre>";

print "<pre>".shell_exec("echo 'Test 1' > example1.txt > \n chmod 777 example1.txt")."</pre>";

print "<pre>".shell_exec("echo 'Test 1' > example1.txt >
chmod 777 example1.txt")."</pre>";

Lancer un script contenu dans un fichier.

Pour exécuter un script contenu dans un fichier, utilisez file_get_contents. Cette fonction permet de récupérer le contenu d’un fichier.

print "<pre>".shell_exec(file_get_contents("script.sh"))."</pre>";

Voilà c’est tout pour ce tuto, et n’oubliez surtout pas : BI-DOU-ILLEZ !

Source : Documentation PHP.

PHP : Fonction pour lister le contenu d’un dossier.

Icône dossier

Voici une ch’tite fonction PHP pour lister le contenu de vos dossiers, ça sert toujours d’avoir ce genre de fonction sous la main. La fonction renvoie un tableau des éléments contenu dans le dossier.

Paramètres

$dir

C’est le chemin PHP du fichier. Attention donc au répertoire courant si vous faites des inclusion (fonction include ou require).

$prefix

Par défaut il est à false. S’il est à true. Le chemin du dossier ($dir) sera placé avant le nom du fichier ou du sous-répertoire.

$type

Définit le type de fichier à afficher :

  • Si $only == false, tous les fichiers et dossiers seront listés.
  • Si $only == "file", seuls les fichiers seront listés.
  • Si $only == "dir", seuls les dossiers seront listés.

Le code

public function list_dir($dir, $prefix = false, $type = false) {
  $list = array();
  //On supprime le slash final.
  $dir = preg_replace("#(.+)(\/{1})$#isUu", "$1", $dir);
  if (is_dir($dir)) {
    if ($od = opendir($dir)) {
      while (($file = readdir($od)) !== false) {
        if ($file != ".." and $file != ".") {
          /*
          On ne tient pas compte de  .. et .
          qui sont le répertoire courant et le repertoire mère.
          */
          if (is_dir("$dir/$file") and $file != "file") {
            // Si c'est un dossier et que l'on affiche les dossiers.
            $list[] = ($prefix ? "$dir/": "").$file;
          }
          else if (is_file("$dir/$file") and $type != "dir") {
            // Si c'est un fichier et que l'on affiche les fichiers.
            $list[] = ($prefix ? "$dir/": "").$file;
          }
        }
      }
      closedir($od);
    }
  }
  return $list;
}

Voilà c’est tout pour ce tuto, et n’oubliez surtout pas : BI-DOU-ILLEZ !

PHP : Transformer un tableau en objet.

Illustration : Tableau vers Objet

Pour une raison qui ne regarde que vous, si vous avez besoin de changer un tableau en objet voici une fonction PHP qui pourrait vous y aider. Je sais que certains préfèrent manier des objets en lieu et place des tableaux mais attention à ne pas en faire trop car il ne s’agirait pas d’alourdir votre code et son traitement juste pour une histoire de syntaxe…

function array_to_object($array) {
  $object = new stdClass;
  foreach($array as $key => $value) {
   if(is_array($value)) {
     // Si c'est un tableau multidimensionnel, on appelle de nouveau la fonction.
     $object->$key = array_to_object($value);
   } else {
     $object->$key = $value;
   }
  }
  return $object;
}

Voilà c’est tout pour ce tuto, et n’oubliez surtout pas : BI-DOU-ILLEZ !

Date en français avec PHP sous Ubuntu

Un autre article tiré de feu blog.web-petit.com

Les dates en français pour un site en français ou multilingue, c’est essentiel. Et en PHP sous Ubuntu ce n’est pas très compliqué avec la fonction PHP strftime.

Dans la console :

sudo apt-get install language-pack-fr-base

Et au début de votre script PHP :

setlocale(LC_TIME, "fr_FR.UTF-8");

Pour une autre langue comme le finnois (oui pourquoi le finnois ? et pouquoi pas ? :-D ) remplacer fr par fi.

Pour savoir comment utiliser strftime allez à l’article correspondant dans la documentation PHP. Voilà vos belles dates sont en français.

Voilà c’est tout pour ce tuto, et n’oubliez surtout pas : BI-DOU-ILLEZ !

Anonymous Pro : une police pour développeur.

Une police spéciale développeur ? Oui ça existe et c’est une création de Mark Simonson. C’est un designer et sur son site on peut acheter des fontes mais celle-ci, en l’occurrence la police Anonymous Pro est sous licence SIL Open Font License et elle est gratuitement téléchargeable sur son site.

Pour ma part, c’est toujours un peu déroutant de faire face à une nouvelle police (non non il ne s’agit pas des forces de l’ordre ;-) ). J’ai l’habitude de la bonne vieille monospace mais à première vue Anonymous Pro m’est agréable. Après les goûts et les couleurs ça ne se discute pas. Phrase bateau mais que voulez-vous ? Je n’ai pas trouvé mieux.

Outre le côté jolitude « joliesse » il est à noter que Mark Simonson a fait en sorte que pour les caractères qui se ressemblent dans certaines polices ce ne soit pas le cas dans la fonte « Anonymous Pro » comme les 0, O,o,l ou encore 1.

J’ai appliqué cette police sur le module syntaxhighlighter du site. Donc si vous l’avez installé, elle s’affichera sur les bouts de codes publiés dans les articles du site.

Je vous laisse admirer une ch’tite capture d’écran du fichier index.php du thème WordPresss du site. Tout ça sous Gedit avec le thème que j’utilise : Oblivion.

Anonymous Pro