PHP biodégradable

Eléphant du PHP | 332 Messages

26 juin 2006, 16:35

Bonjour,
Je met ce post ici pour l'aspect sécurité.

Nous avons une configuration de production avec un serveur Dell bipro, Windows Server 2003, IIS 6, PHP 4.4.2 installé en mode isapi, Zend Optimizer 2.5.10
Pour le site, nous utilisons intensivement Smarty et Pear:DB (connection à une base de données Oracle 10 située sur un autre serveur) ; Pear est installé dans le répertoire de PHP pour une utilisation commune à plusieurs sites.
Nous avons aussi des outils du monde libre et qui utilisent MySQL : phpmyadmin bien sûr, mais aussi les forums Agora et phpBB, le suivi de bug Mantis, le wiki MediaWiki, ...

Au fil du temps (quelques jours, quelques dizaines de jours, cela dépend de l'utilisation du site), commencent à apparaître des messages du type

Code : Tout sélectionner

Fatal error: Call to undefined function: xxx in c:\xxx\DB.php on line 59
Bien sûr, le fichier est placé à cet endroit et tout marchait 5 minutes avant.
Puis cela va très vite, bientôt une page sur deux produit des des Error 500 : Internal Error, puis des messages

Code : Tout sélectionner

PHP access violation on (adresse mémoire)
et on passe rapidement de 1 page sur 2, à 3 pages sur 4, ...

A ce moment-là, on reboote complètement le serveur et tout est reparti pour une semaine de tranquillité. Ca c'est le scénario le plus courant, des fois on a des access violations avant les erreurs 500.

Question 1 : est-ce que quelqu'un a déjà eu ce problème et s'il l'a résolu, comment ?
Question 2 : Comment arriver à localiser ce qui provoque ces access violations ou du moins le premier. C'est peut-être une partie d'un programme ou d'une bibliothèque (avec un truc récursif ou un truc codé à l'arrache, je ne sais pas), mais quand on me prévient, je ne sais pas quel utilisateur l'a eu en premier (ce n'est pas forcément celui qui me prévient).
Je ne suis pas sûr que les solutions d'interception d'erreur à base de PHP servent à quelque chose quand PHP est planté.

Je suis preneur de toutes les idées possibles à part passer sous Linux (impossible) et passer sous Apache (peut-être en tout dernier ressort).
Quant à installer PHP en mode CGI, j'y suis arrivé sur le serveur de dev (IIS 5 sous XP), mais j'ai jeté l'éponge sur IIS 6 ; cela dit, avec une doc décrivant ce qu'il faut faire au niveau autorisations, pourquoi pas ?

Merci
Modifié en dernier par Henri le 26 juin 2006, 23:49, modifié 1 fois.

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

26 juin 2006, 17:51

J'ai effectivement déjà eu ce type d'erreur (access violation) sur la même config à peu de chose près (2000 Server + IIS 5, donc vieillot tout de même par rapport à toi). Cela concernait pour moi Sugar CRM, utilisé uniquement en intranet par une trentaine de personnes simultanément en période de bourre. Donc pas un problème de montée en charge.

J'ai essayé beaucoup de choses à l'époque, et le passage à Apache a tout arrangé.

Par la suite j'ai par contre eu toujours pas mal de problèmes de gestion de mémoire, que j'ai "reglé" en programmat un reboot hebdomadaire préventif, de nuit (en règle général il se mettait à planter au bout de 20 jours, encombrement mémoire, swap à mort, chute brutale de performances, jusqu'au crash).

Dans mon rapport j'ai indiqué qu'il s'agissait d'une rustine mais que l'unique solution était un passage à une plate-forme LAMP (je ne suis pas un linuxien mais pour les serveurs, il y a un problème de gestion de mémoire qui est vraiment critique, et Windows ne tient pas la route à ce niveau).Mais dans un premier temps le passage à Apache arrangera déjà les choses, le coupable dans ton cas c'est la liaison IIS-PHP qui est encore boiteuse.

Eléphant du PHP | 332 Messages

29 juin 2006, 20:34

Merci pour la réponse.

POur l'instant, nous avons passé le serveur PHP en CGI, nous avons mis à jour l'optimizer de zend et tout semble fonctionner correctement.

Touchons du bois !