But : détecter la version de PHP interprétant le code source sur son serveur
Suivant les versions de PHP vos scripts peuvent plus ou moins fonctionner.
Je vous propose aujourd'hui une astuce permettant de détecter la version PHP mais également de préciser votre version minimale requise.
En effet j'ai déjà eu assez de surprises dans ce style, surtout lorsque vous fournissez un script qui peut-être réutilisé par d'autres personnes : source d'incompatibilité garantie.
Voici une fonction permettant de pallier à ce souci :
function get_phpversion($version_requise = false ,$display = false) { if($version_requise == false AND $display == false) { echo 'Vous devez au moins préciser un paramètre pour la fonction get_phpversion()'; exit; } # si TRUE passé en paramètre, permutation dans display car cela ne concerne pas $version_requise if($version_requise === true AND $display == false) { $display = true; $version_requise = false; } if(function_exists('phpversion')) $v = phpversion(); elseif(PHP_VERSION) $v = PHP_VERSION; else return 'Impossible de détecter la version PHP'; # suppression des "." pour rendre le nombre en type entier $v_entier = str_replace('.','',$v); $version_requise = str_replace('.','',$version_requise); $tiret_position = strpos($v_entier, '-'); if($tiret_position !== FALSE) $v_entier = substr($v_entier, 0, $tiret_position); # affichage demandé if($display != false OR ($version_requise===true AND $display == false)) echo $v; # affichage demandé, sans retour de la version if($display != false AND empty($version_requise)) return; # ajout de 0 dans le cas d'une version 6 par exemple => 600, sinon 6 < 52 (6.0.0 < 5.2, illogique) $version_requise = str_pad($version_requise, strlen($v_entier) , 0); #retour version demandé if($version_requise != false) { if($v_entier >= $version_requise) return true; else return false; } }
Cette fonction comporte un double utilisation possible :
- retour booléen = true si la version minimale requise ($version_requise) est satisfaite
- affichage de la version (float) si l'affichage est demandé ($display) ou si aucun paramètre n'est passé
- combinaison des deux : retour booléen + affichage de la version
Paramètres de la fonction :
bool/float get_phpversion (float $version_requise, bool $display)
get_phpversion affiche la version PHP si aucun paramètre n'est passé
get_phpversion affiche la version PHP si display = TRUE
get_phpversion retourne TRUE si la version de PHP version_requise est précisée et satisfaite
get_phpversion retourne TRUE/FALSE et affiche la version si version_requise et display sont précisés
Exemples d'utilisation (version PHP serveur = 5.2.5-3) :
get_phpversion('5'); // retourne TRUE get_phpversion('5.3'); // retourne FALSE get_phpversion('5.3',true); // retourne FALSE et affiche "5.2.5-3" get_phpversion('5.0.1',true); // retourne TRUE et affiche "5.2.5-3" get_phpversion('6'); // retourne FALSE get_phpversion(true); // retourne NULL et affiche "5.2.5-3"
Faîtes en bon usage, si vous réaliser des modifications n'oubliez pas de me les transmettre (licence Creative Commons)
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
2 commentaires
Plusieurs petits points à noter.
Tout d'abord, étant donné le nom de la fonction, 'get..', elle devrait retourner la version de php (par défaut) et non un booléen. Ainsi, je remplacerait le fonctionnement de get_phpversion(true); par getphpversion(); // sans paramètres donc et avec 2 underscores ou aucun ^^.
Enfin, la fonction native version_compare réalise elle aussi une bonne partie du travail prenant en charge les suffixes 'rc', 'dev', 'a' (alpha), 'b' (beta), etc..
Toutefois, cela reste un bon petit entrainement pour pas rouiller en php 😉
Disons que la fonction faisait ça au départ, et puis je me suis dit que ça serait pas mal si elle avait plusieurs utilités. Faire deux fonctions ne me plaisait pas vraiment... et comme je ne comptais pas au départ la diffuser et bien je ne l'ai pas créer dans les règles de l'art 🙂
D'autre part j'ai découvert version_compare en court de création de la fonction... prétextant un bon entrainement je l'ai terminée.
Quant au nom de la fonction, tu peux toujours l'appeler xharkversion() comme ça aucune anticipation possible du type retourné 🙂