[SPIP Zone] ajouter <necessite id="PHP"> ?

Date: Wed, 18 Mar 2009 00:01:40 +0000 (GMT)
De: cy_altern <cy_altern@yahoo.fr>
A: SPIP Zone <spip-zone@rezo.net>
Sujet: [SPIP Zone] ajouter <necessite id="PHP"> ?

Du coup, vu le nombre grandissant de plugins qui ont étés codés "PHP 5 only",
ça serait peut être une idée d'intégrer la possibilité de faire un <necessite
id="PHP" version="[5;]" /> (ou toute autre combinaison [mini;max]selon la
syntaxe des versions standard pour les autres id)

Je colle ci-dessous le patch qui permet de mettre ça en oeuvre (la détection
de version de PHP ne se fait qu'au niveau de la version majeure et repose sur
un test de type function_exists() pour éviter l'analyse d'un $_SERVER qui peut
être fantaisiste...)
Testé avec SVN [13840]

PS: ceci sans chercher à juger si c'est *bien* ou *mal* de coder des plugins
ne fonctionnant pas en PHP4...

----------------
fichier /ecrire/inc/plugin.php: ajouter le bloc suivant en ligne 118:

   // Necessite une version de PHP?
   else if ($id=='PHP' AND preg_match(',([\d])?[\d\.]*;([\d]?),', $need['version'], $match)!==0) {
       $tests = array(4=>'array_count_values', 5=>'file_put_contents');
       if ($v_mini=$match[1]
           AND array_key_exists($v_mini,$tests)
           AND !function_exists($tests[$v_mini]))
               $msg .= "<li>"
                   ._T('plugin_necessite_php_mini', array('version' => $v_mini))
                   ."</li>";
       if ($v_max=$match[2]+1
           AND array_key_exists($v_max,$tests)
           AND function_exists($tests[$v_max]))
               $msg .= "<li>"
                   ._T('plugin_necessite_php_maxi', array('version' => $match[2]))
                   ."</li>";
   }

---------------
fichier /ecrire/lang/ecrire_fr.php: 2 chaînes de langue suplémentaires (après ligne 882)
'plugin_necessite_php_mini' => 'N&eacute;cessite PHP en version @version@ minimum.',
'plugin_necessite_php_maxi' => 'N&eacute;cessite PHP en version @version@ maximum.',

Je ne vois pas d'utilisation des fonctions
phpversion PHP: phpversion - Manual
version_compare PHP: version_compare - Manual
plugin_version_compatible http://doc.spip.org/@plugin_version_compatible
dans ce patch. Est-ce normal ?

En date de : Sam 21.3.09, Nicolas Krebs <nicolas1.krebs2@netcourrier.com> a écrit :

>
>----------------
>fichier /ecrire/inc/plugin.php: ajouter le bloc suivant
en ligne 118:
>
> // Necessite une version de PHP?
> else if ($id=='PHP' AND
preg_match(',([\d])?[\d\.]*;([\d]?),',
$need['version'], $match)!==0) {
> $tests =
array(4=>'array_count_values',
5=>'file_put_contents');
> if ($v_mini=$match[1]
> AND array_key_exists($v_mini,$tests)
> AND !function_exists($tests[$v_mini]))
> $msg .= "<li>"
>
._T('plugin_necessite_php_mini',
array('version' => $v_mini))
> ."</li>";
> if ($v_max=$match[2]+1
> AND array_key_exists($v_max,$tests)
> AND function_exists($tests[$v_max]))
> $msg .= "<li>"
>
._T('plugin_necessite_php_maxi',
array('version' => $match[2]))
> ."</li>";
> }

[...]

Je ne vois pas d'utilisation des fonctions
phpversion
  PHP: phpversion - Manual
version_compare
  PHP: version_compare - Manual
plugin_version_compatible
  http://doc.spip.org/@plugin_version_compatible
dans ce patch. Est-ce normal ?

oui c'est normal: je me suis fait planter dans un plugin qui choisissait la fonction PHP4 ou PHP5 en utilisant phpversion() parce que le serveur peut renvoyer ce qu'il veut voire rien en fonction de sa config...
Du coup le test de version est fait en faisant un function_exists() sur une fonction spécifique de PHP4 ou PHP5 (cf la ligne 4=>'array_count_values', > 5=>'file_put_contents'); )

à bientôt

Hello,

J'ai commité une version de Facteur compatible PHP4 et PHP5, elle intègre les 2 versions de phpmailer.

A +

Pierre