Comment faire fonctionner plusieurs versions de PHP sur IIS simultanément

J’ai développé un site Web nommé vishwasthali.org en PHP et je l’ai hébergé dans IIS7 sur un serveur tiers. Tout le rest fonctionne bien, sauf pour le code d’access à la firebase database que j’ai écrit en utilisant MySQLi API. Le code fonctionne correctement sur l’hôte local, mais pas sur le serveur. En utilisant phpinfo() sur le serveur et sur ma machine, j’ai constaté que:

(1) Sur ma machine (exécutant Windows 7 32 bits, environnement d’hébergement Apache), la version de PHP est la 5.3.8 et la version de mysqli est la 5.0.8-dev , et

(2) Sur le serveur (exécuté sur Windows Server 2008, environnement d’hébergement IIS7), la version de PHP est 5.2.14 et la version de mysqli est 5.0.51a .


Voici les captures d’écran de phpinfo() sur le serveur: entrer la description de l'image icientrer la description de l'image ici


Voici l’exemple du code mysqli .

 session_start(); include_once 'code_files/conn.php'; $stmt = $mysqli->prepare('SELECT * FROM adminusers WHERE Username = ? AND `Password` = ?'); $stmt->bind_param('ss', $_POST['Username'], $_POST['Password']); $stmt->execute(); $result = $stmt->get_result(); if($result->num_rows > 0) ........ else ........ 

Utiliser echo get_class($mysqli); affiche mysqli . Cela signifie que le code détecte mysqli. Mais la déclaration $stmt n’est pas préparée. Même l’ $mysqli->error; n’affiche aucune erreur, peut-être à cause du fonctionnement de PHP sur IIS.

Maintenant, j’ai deux options, soit changer le code d’access à la firebase database à l’API classique de mysql , soit mettre à jour les versions de PHP et MySQLi sur le serveur en téléchargeant les derniers binarys PHP depuis php.net . Je ne voudrais pas aller avec la première option (ça marche vraiment), j’espère que vous savez pourquoi. Ce dernier n’est pas entre mes mains. Je ne peux rien penser de plus que ceux-ci.

Je suppose que le remplacement de php_mysqli.dll pourrait mettre à jour la version de mysqli, pas sûr. Mais qu’en est-il de la version de PHP?

Que puis-je faire dans ce cas? Une mise à jour des versions de PHP et MySQLi sur le serveur va-t-elle résoudre mon problème? Si OUI, cela peut-il affecter d’autres sites Web PHP exécutés sur le serveur?

Merci d’avance.

D’accord. Voici la solution. Différentes versions de PHP peuvent être activées et exécutées côte à côte dans IIS7. Voici la procédure que j’ai testée avec succès sur ma machine. Je ne fais qu’informer le processus, étant donné que vous connaissez les systèmes IIS et FastCGI. Sinon, voir le lien: http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis

  1. Téléchargez des versions différentes de packages zip non-thread-safe avec des binarys de PHP à partir de http://www.php.net/downloads.php .
  2. Extrayez-les pour séparer les dossiers de votre disque dur comme C: \ PHP5.2.14 , C: \ PHP5.4.3 , etc.
  3. Ouvrez les fichiers php.ini dans tous les dossiers et ajoutez / décommentez et modifiez les parameters suivants dans tous les dossiers.

    session.save_path = “C: \ Windows \ Temp”
    expose_php = Off
    ;; Choisissez n’importe quel chemin ici, mais le plus préféré est celui-ci
    open_basedir = “C: \ inetpub \ wwwroot”
    extension_dir = “ext”
    fastcgi.impersonate = 1
    cgi.fix_pathinfo = 1
    cgi.force_redirect = 0
    ;; Vous pouvez choisir différents fuseaux horaires pour différents sites Web.
    date.timezone = “vous fuseau horaire”
    ;; Activez toutes les extensions que vous souhaitez par site Web, par exemple
    extension = php_mysql.dll
    extension = php_mysqli.dll

  4. Ouvrez le gestionnaire IIS . Ajoutez autant de mappages de gestionnaires que le nombre de versions de PHP à installer. Modifiez simplement le chemin de l’ exécutable dans la boîte de dialog Modifier le mappage du module . Nommez les mappages comme pratiques pour les identifier facilement, comme PHP 5.2.14 via FastCGI et PHP 5.4.3 via FastCGI .

  5. Dans la section IIS du Gestionnaire des services Internet , ouvrez les parameters FastCGI . Ici, vérifiez s’il y a autant d’entrées que le nombre de versions de PHP à exécuter. Sinon, cliquez sur Ajouter des applications dans le volet de droite. Sélectionnez un fichier php-cgi.exe dans le dossier de la version PHP requirejse dans le champ Chemin complet de la boîte de dialog “Ajouter une application FastCGI”. Cliquez sur OK.

  6. Maintenant, copiez le dossier de votre site Web dans C: \ inetpub \ wwwroot ou le chemin choisi dans le paramètre open_basedir de php.ini. Dans le Gestionnaire des services Internet (IIS), Sites expants -> Site Web par défaut dans le volet gauche. Sélectionnez le site Web que vous souhaitez cibler sur une version spécifique de PHP.

  7. Open Handler Mapping , avec un site Web sélectionné dans le volet gauche. Vous trouverez beaucoup de cartographies ici. Ne cherchez que les entrées que vous avez créées (celles dont le chemin est * .php ). Parmi eux, conservez le seul dont vous avez besoin pour le site Web sélectionné et supprimez les autres. Cela ne supprimera PAS les mappages de votre ordinateur, mais uniquement du site Web sélectionné. Votre site web ne fonctionnera désormais que sur la version PHP dont vous avez conservé le mappage. Faites de même pour tous les sites Web que vous souhaitez cibler sur une version PHP spécifique. Vous pouvez le tester en exécutant phpinfo() sur les sites Web.

Après avoir ajouté de nouveaux sites Web à wwwroot , aucun gestionnaire ne sera associé. Ajoutez un nouveau gestionnaire ciblant la version de PHP souhaitée. Vous avez terminé.

Ce n’est peut-être pas la meilleure procédure. Mais cela a fonctionné pour moi. Pour vérification, voir ce lien:
http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis/#PHP_Versioning

J’espère que ça aide, au cas où quelqu’un en aurait besoin.

Cordialement

Il y a quelques petites erreurs ici!

a) La différence entre votre environnement de développement et votre site en direct est trop importante! Utilisez au moins le même serveur Web et la même version de PHP 5.x !

b) Ne jamais rendre publiquement accessible votre phpinfo (), c’est un très gros risque de sécurité! Un pirate informatique peut en tirer de nombreuses informations.

c) Même lorsque vous utilisez des instructions préparées, vous devez nettoyer vos données utilisateur avant de les utiliser dans une requête!

Je ne pense pas que votre problème ait quelque chose à voir avec les différentes versions de mysqli. Peut-être devriez-vous d’abord vous assurer d’utiliser le même serveur Web et la même version de php dans les deux environnements, puis demander à nouveau avec plus de code (par exemple, comment vous établissez la connexion) si cela ne fonctionne toujours pas.

Oui, la mise à jour de PHP peut affecter d’autres projets sur le serveur, mais cela signifie simplement que vous devez mettre à jour ces projets, ce que vous devez faire de toute façon!

Et non, télécharger PHP depuis php.net n’est pas la bonne solution dans votre cas. Vous devez utiliser les versions testées et approuvées fournies par les référentiels respectifs.