Mot-clé - compatibilité

Fil des billets - Fil des commentaires

vendredi 21 juin 2013

Lecture de date en PHP

Etant très souvent embêté avec les différents formats de dates utilisés au sein d'un même site, j'ai exploré le manuel PHP et j'avais trouvé DateTime::createFromFormat très pratique. Mais valable uniquement en PHP 5.3 minimum. Qu'à cela ne tienne, voici presque une équivalence pour PHP 5.1 et plus.

Lire la suite...

jeudi 12 novembre 2009

Retrouver le type MIME

Lorsqu'on propose un téléchargement via une interface web, ou si on veut mettre des pièces jointes dans un mail, il faut avoir le "mime-type" (Multipurpose Internet Mail Extensions) du fichier. Une fonction PHP existe pour celà, c'est mime_content_type() malheureusement elle n'est pas toujours disponible.

Voici une petite astuce qui permet de la recréer:

<?php
if (!function_exists(mime_content_type)) {
   // Nous sommes dans le cas où elle n'existe pas
   function mime_content_type($f) {
      $ext = strtolower(substr($f,strrpos($f, ".")));
      // On ne se base que sur l'extension du fichier
      switch($ext){
         case ".gz": $mtype = "application/x-gzip"; break;
         case ".tgz": $mtype = "application/x-gzip"; break;
         case ".zip": $mtype = "application/zip"; break;
         case ".pdf": $mtype = "application/pdf"; break;
         case ".png": $mtype = "image/png"; break;
         case ".gif": $mtype = "image/gif"; break;
         case ".jpg": case "jpeg": $mtype = "image/jpeg"; break;
         // Notez le cas d'un même type avec différentes extensions
         case ".txt": $mtype = "text/plain"; break;
         case ".htm": case ".html": $mtype = "text/html"; break;
         default: $mtype = "application/octet-stream"; break;
         // Par défaut, c'est application/octet-stream
      }
      return $mtype;
   }
}
?>

vendredi 7 août 2009

Fonction fputcsv en PHP4

Alors que la fonction fgetcsv existe en PHP4 et en PHP5, la fonction fputcsv n'existe qu'en PHP5, ce qui est fort dommage lorsqu'on veut travailler avec des fichiers d'exports ou bien lorsqu'on veut avoir un script utilisable sur la plupart des serveurs sans connaitre leur version de PHP.

Lire la suite...

vendredi 5 juin 2009

json_encode et json_decode en PHP4

Malgré ce que j'ai pu dire précédemment, il arrive parfois que je doive adapter mes scripts pour des versions anciennes de PHP. Je suis donc obligé d'avoir une petite série de fonctions de compatibilité, que je vais vous proposer au fil de mes développements.

Les fonction json (decode et encode) ne sont natives en PHP que depuis la version 5.2, mais heureusement il y a un moyen de les rendre accessibles depuis les versions antérieures. Pour cela, il faut télécharger le package JSON-PEAR et en extraire le fichier JSON.php.

Ensuite, ce petit script vous permet de créer (si nécessaire) les fonctions:

<?php
if ( !function_exists('json_decode') ){
	require_once (dirname(__FILE__).'/JSON.php');
    function json_decode($content, $assoc=false){
		if ( $assoc ){
			$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
		} else {
			$json = new Services_JSON;
		}
		return $json->decode($content);
	}
}
 
if ( !function_exists('json_encode') ){
	require_once (dirname(__FILE__).'/JSON.php');
	function json_encode($content){
		$json = new Services_JSON;
		return $json->encode($content);
    }
}
?>

Bien entendu, je pars du principe que JSON.php est dans le même répertoire que le fichier de fonctions, à vous d'adapter les chemins utilisés dans require_once

mercredi 13 mai 2009

Fonction str_split

Bien que je développe essentiellement en PHP 5, il m'arrive parfois d'avoir à travailler sur des hébergements qui sont encore en PHP 4, ce qui est parfois handicapant car des fonctions manquent.

Récemment, je me suis servi dans un script de la fonction str_split() qui permet de transformer une chaîne de caractères en un tableau. Bien entendu, je ne suis pas le seul à avoir fait cela, il y a d'autres versions sur la page officielle.

array str_split ( string string [, int split_length] ) : Convertit une chaîne de caractères en tableau. Si le paramètre optionnel split_length est spécifié, le tableau retourné sera découpé en sous-parties, chacune de taille split_length, sinon, chaque sous-partie aura la taille d'un caractère.

Cette fonction retourne FALSE si split_length est inférieur à 1. Si la longueur de split_length est supérieure à celle de string, la chaîne entière est retournée dans le premier (et seul) élément du tableau.

Fonction

<?php
if (!function_exists('str_split')) {
   /**
    * Convertit une chaine en tableau
    * Retourne false si $length est inférieur à 1, sinon un tableau
    * @param string $string Chaine à convertir
    * @param integer $length Longueur des sous-ensembles
    * @return mixed
    */
   function str_split($string, $length=1) {
      if (intval($length)<1) return false;
      if (strlen($string)<=$length) return array($string);
      $parts = array();
      while(strlen($string)>0) {
         $parts[] = substr($string, 0, $length);
         $string = substr($string, $length);
      }
      return $parts;
   }
}
?>

Utilisation

$string = 'Salut Dave';
$test = str_split($string);
print_r($test);
$test2 = str_split($string, 3);
print_r($test2);

Cet exemple va afficher:

Array (
    [0] => S
    [1] => a
    [2] => l
    [3] => u
    [4] => t
    [5] =>
    [6] => D
    [7] => a
    [8] => v
    [9] => e
)
Array(
   [0] => Sal
   [1] => ut 
   [2] => Dav
   [3] => e
)