Détection du nombre de bits d'un serveur

Dans le cadre d’un application de paiement en ligne, nous avons une classe permettant d’effectuer le cryptage fonctionnant sur les environnements 32 bits (nos ordinateurs de développement) et une autre prévus pour du 64 bits (nos serveurs de production) …

Pour faciliter la gestion et ne pas avoir à se trimballer des modifications de fichier à la va-vite lors des mises en prod, on aurait souhaiter mettre un require conditionnel de la forme (très simplifié :D) :


if ( system == 32 bits)
{
  require 'class32.php';
}
else if ( systeme == 64 bits)
{
  require 'class64.php';
}

sauf que j’ai beau googliser dans tous les sens, impossible de mettre la main sur un moyen pour récupérer le nombre de bits du serveur executant PHP :frowning: … La seule solution que j’ai trouvé consisterait à analyser un output brut en ligne de commandes de phpinfo(), et de parser le résultat de façon à en extraire la valeur de la case System dans laquelle on peut trouver tous les details sur le système executant le serveur :paf: …

Donc si quelqu’un à une soluce simple, je suis preneur … Ca doit quand même pas être compliqué, nom d’un bit :o [:shy] :ane:

Y a une version 64bits de PHP? Et en fait, PHP est-il une machine virtuelle 64bits ou 32bits? Good question, non?

Euh, voué good question, mais ça ne répond pas à la mienne :o

Comment détecter le nombre de bits de l’ordinateur sur lequel tourne PHP de façon à charger tel ou tel class en fonction du résultat ? :neutre: … Car si on ne charge pas la bonne classe, l’encryptage de nos informations est refusé par le système de paiement distant, donc c’est bien que c’est utile :o
Edité le 10/02/2009 à 19:00

Je ne sais pas si c’est fiable mais chez moi $_SERVER[‘SERVER_SOFTWARE’] contient “Apache/2.2.10 (Win32) PHP/5.2.6”.

Après peut-être que tu peux détecter par le test ?
Un truc genre :

$test = operation_test();
if ($test == VALEUR_RESULTAT_OPERATION_64BITS) {
  require 'class64.php';
} else {
  require 'class32.php';
}

Regarde du côté des constantes PHP_INT_SIZE et PHP_INT_MAX (http://fr3.php.net/integer), de mémoire PHP_INT_SIZE = 4 en 32 bits et 8 en 64 bits. A tester cependant.

Pas mal :o

Testé à l’instant :

  • sur mon Win32 > PHP_INT_SIZE = 4
  • sur le serveur Debian 64 > PHP_INT_SIZE = 8

Je valide demain, mais à priori merci d’avance :smiley:

Ouep, un test comme celui-là :slight_smile: