Aller au contenu | Aller au menu | Aller à la recherche


PHP 5.3 changements et configuration

Petit tour d'horizon des modifications sur PHP 5.3 qui anticipe la version de PHP 5.4 (car PHP6 semble abandonné) .

PHP 5.3 stable

Suppression des balises courtes <?

Les balises courtes (short open tag) sont désactivées par défaut dans les directives internes du php.ini

Donc les instructions suivantes sont désormais interdites :

<?
<?=

et doivent être remplacées par

<?php
<?php echo

Pour détecter vos balises courtes a remplacer, sous linux vous pouvez utiliser :

egrep -R "<\?( |=|\n|$)" /var/www/* | grep -v concorde > /tmp/check.php.short.tag
grep -R -E "<\?( |=|\n|$)" /var/www/* | grep -v concorde > /tmp/check.php.short.tag

Et pour inclure la tabulation :

Essaie de taper la tabulation avec la séquence de touches suivante : "CTRL V" "TAB" Appuie sur les touches CTRL+V et ensuite sur la touche "Tabulation", puis le reste du motif.

grep -R -E "<\?( |   |^M|=|\n|\t|$)" /var/www/* | grep -v concorde > /tmp/check.php.short.tag

Ou,

TAB=`echo -e '\t'`
grep -R -E "<\?( |$TAB|^M|=|\n|\t|$)" /var/www/* | grep -v concorde > /tmp/check.php.short.tag

Suppression des guillemets magiques (Magic Quotes : magic_quotes)

Avertissement : Cette fonctionnalité est OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 6.0.0. Nous vous encourageons vivement à ne plus l'utiliser.

Les guillemets magiques (littéralement, les Magic Quotes) est un processus qui protège automatiquement les données introduites dans un script PHP. Il est recommandé de développer les applications sans l'aide des guillemets magiques, et de protéger manuellement les données.

  • magic_quotes_gpc Affecte les données issues des requêtes HTTP (GET, POST, et COOKIE). Ne peut pas être configurée durant l'exécution, et vaut par défaut on en PHP inférieur à PHP 5.3. Voir aussi get_magic_quotes_gpc().

La directive magic_quotes_gpc ne peut être désactivée qu'au niveau du système, et non pas à l'exécution. En d'autres termes, utiliser ini_set() n'est pas possible.

Magic quotes sur Wikipedia.

Eric Couchelou explique comment désactiver les Magic Quotes en mutualisé via une fonction php

PHP Deprecated: Function set_magic_quotes_runtime() is deprecated

Warning : This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.

Suppression des variables super-globales

Avertissement : Cette fonctionnalité est OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 6.0.0. Nous vous encourageons vivement à ne plus l'utiliser.

register_globals boolean

Définit si oui ou non les variables EGPCS (Environment, GET, POST, Cookie, Server) seront enregistrées comme des variables globales.

Depuis » PHP 4.2.0, la valeur par défaut de cette directive est off.

Ressources

Code PHP obsolète et remplacement

Pour rechercher l'appel à des méthodes obsolètes ou en erreur depuis vos logs Apache :

[root@MonServeur ~]# tail -f /var/log/httpd/*-error_log  | grep -E "(Fatal|Parse|assumed)"

Fonctions POSIX Regex : Function ereg_replace() is deprecated in

Note: À partir de PHP 5.3.0, l'extension regex est obsolète : l'appel à une de ces fonctions émettra une erreur de niveau E_DEPRECATED.

  • ereg_replace — Remplacement par expression rationnelle
  • ereg — Recherche par expression rationnelle standard
  • eregi_replace — Remplacement par expression rationnelle insensible à la casse
  • eregi — Recherche par expression rationnelle insensible à la casse
  • split — Scinde une chaîne en un tableau, grâce à une expression rationnelle
  • spliti — Scinde une chaîne en un tableau, grâce à une expression rationnelle
  • sql_regcase — Prépare une expression rationnelle pour effectuer une recherche insensible à la casse

Ces expressions rationnelles ne sont pas compatibles avec les données binaires. Les expressions PCRE le sont.

Astuce :

  • PHP supporte aussi des expressions rationnelles compatibles Perl, avec l'extension PCRE functions. Ces fonctions supportent des recherches non-gourmandes, des assertions, des sous-masques conditionnels et toute une gamme de fonctionnalités absentes des expressions rationnelles POSIX.
  • preg_replace(), qui utilise la syntaxe des expressions rationnelles compatibles PERL, est une alternative plus rapide de ereg_replace().

En ressources sur les expressions rationnelles, voyez :

Construction Classe équivalente Construction de négation Classe équivalente
\d (un chiffre) [0-9] \D (chiffres, non !) [^0-9]
\w (1 caractère de mot) [a-zA-Z0-9] \W (mots , non!) [^a-zA-Z0-9]
\s (espace) [ \r \n \f \t] \S (space, non !) [^ \r \n \f \t]
function datetime_us_2_fr($date) {
	// Convertir date time MySQL en date FR : 2009-07-14 19:31:59 => 14/07/2009 à 19h31
//	return ereg_replace('^([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$', '\\3/\\2/\\1 à \\4h\\5', $date);
	return preg_replace('/(\d{2,4})-(\d{1,2})-(\d{1,2}) (\d{2}):(\d{2}):(\d{2})/', '\3/\2/\1 à \4h\5', $date);
}
 
/**
 * Convertir date MySQL en date FR : 2011-07-14 => 14/07/2011
 * @param string $date 2011-07-14
 * @return string la date convertie 14/07/2011
 */
function date_us_2_fr($date) {
	// Convertir date MySQL en date FR : 2009-07-14 => 14/07/2009
//	return ereg_replace('^([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})$', '\\3/\\2/\\1', $date);
	return preg_replace('/(\d{2,4})-(\d{1,2})-(\d{1,2})/', '\3/\2/\1', $date);
}
 
/**
 * Convertir date FR en date MySQL : 14/07/2011 => 2011-07-14
 * @param string $date 14/07/2011
 * @return string la date convertie 2011-07-14
 */
function date_fr_2_us($date) {
	// Convertir date FR en date MySQL : 14/07/2011 => 2011-07-14
//	return ereg_replace('^([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,4})$', '\\3-\\2-\\1', $date);
	return preg_replace('/(\d{1,2})\/(\d{1,2})\/(\d{1,4})/', '\3-\2-\1', $date);
}
 
$in = 'Le 1 texte 23 dans 456 lequel on ne veut garder que les chiffres.';
echo $in;
echo ereg_replace('[^0-9]','',$in)."\n";;
echo preg_replace('(\D)','',$in)."\n";
 
function enleve_blanc($string) {
//	$string = eregi_replace(' +', ' ', $string); 	//enlève les multi espaces
//	$string = eregi_replace('^[ ]+', '', $string); 	//enlève les espace au début
//	$string = eregi_replace('[ ]+$', '', $string); 	//enlève les espace a la fin
//	return $string;
	$string = preg_replace('(\s{2,})', ' ', $string); 	//enlève les multi espaces
//	$string = preg_replace('(\s+)', ' ', $string); 	//enlève les multi espaces	(   {0,} {1,} {0,1} correspondent à * , + , ?   )
	return trim($string);	
}
 
function commencePar($pattern, $in) {
//	$pattern = "^Mon début de texte";
//	if( ereg($pattern,$in) ) {
	$pattern = "/^Mon début de texte/";
	if( preg_match($pattern,$in) ) {
		echo "Trouvé";
	}else{
		echo "Non Trouvé";
	}
}
 
function testCodePostal($in) {
//	$pattern = "^[0-9]{5}$";
	$pattern = "/^(\d{5})$/";
 
	if( preg_match($pattern,$in) ) {
		echo "Code Postal correct";
	}else{
		echo "Code Postal incorrect";
	}
}

Les versions

Les versions de PHP5.3.x et son avancement sur :

Télécharger PHP 5.3.1 pour éviter du DoS sur l'upload de fichiers

Attention, les versions antérieures à PHP 5.3.1 sont susceptibles de se faire attaquer de deny de service (attaque par saturation) par des scripts mals veillants qui utilisent la faille d'upload (envoi de fichiers). Il est vivement recommandé de mettre a jour son serveur !

Commentaires

1. Le samedi, mai 8 2010, 13:21 par Michel

Je trouve dommage que php n'assure pas l'utilisation des fonctions qui deviennent obsolètes. Du fait qu'on peut obtenir le même résultat avec les preg qu'avec les postits, une interface n'aurait pas été trop dur à faire.

2. Le samedi, mai 8 2010, 13:55 par Michel

comment remplacer:

split("[^[:digit:]]",....?

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet