osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> osCommerce et register_global, ou comment passer à php5 et php6
maxime
posté 11 Dec 2008, 21:59
Message #1


Ceinture verte OSC
Icône de groupe

Groupe : Membres
Messages : 576
Inscrit : 11-August 04
Membre no 3034



Suite à la demande de Corbin, voici un résumé de la méthodologie que j'ai appliquée pour migrer un script php en respectant les nouvelles règles de php5 et ne pas être pris au dépourvu avec php6.

Je ne parlerai ici que des directives de configuration register_global et register_long_array. php5 est un état de transition, php6 ne permettra pas de choisir ce que l'on veut à ce niveau.

Je ne vais pas m'étendre sur l'intérêt de passer à register_global sur off et register_long_array sur off, la littérature en parle suffisamment. Sachez seulement que php6 obligera ces valeurs sur off.

Rendre osc compatible register_long_array est très simple, on remplace automatiquement les $HTTP_*_VARS par $_*. Ex: $HTTP_POST_VARS devient $_POST.
Par contre devenir register_global off compatible est bien plus complexe. Ce post ne va pas expliquer les détails, c'est parfois lourd, notamment sur les sessions.
L'idée est ne pas remettre en place la faille de sécurité que register_global sur off supprime en faisant quelque chose du genre :
Code
<?php while (list($key, $val) = each($_GET)) {$$key=$val;} ?>


La caractéristique du passage a register_global sur off est grosso-modo que cela ne plante pas (on ne voit pas de message d'erreur), mais le script ne marche pas. Donc pas d'erreur, à part des notice qui alertent (d'où l'étape 1). Le problème vient qu'il faut trouver dans le code des variables php type $mavariable et la remplacer par $_GET['mavariable'].
C'est souvent facile car en lisant le code, ces variables étant issues d'un formulaire, elles sont filtrées par sécurité. Mais on a parfois des surprises (avec des contribs que l'on a insuffisamment épluchées) mrgreen.gif

1) Je loggue toutes les erreurs, et y compris les Notice et les corrige. C'est assez pénible, car les notice il y en a, surtout avec les contributions. Mais bon, on obtient un code plus propre, plus "pro". C'est à mon sens l'étape la plus longue, mais on gagne du temps après.
Pour logger les erreurs, soit on fait un trigger spécifique (voir doc php), soit via une directive dans le htacess. Cette dernière à l'avantage de logger les erreurs fatales également.
Attention à ne pas faire ça sur un site en prod au début car les logs peuvent exploser. Une fois tout débugger, passer en prod permettra de logger des erreurs oubliées.

2) Je passe en revue les problèmes évidents dans le code et quelques tests. C'est long, mais on évite les grosses erreurs. Il suffit généralement de s'attarder sur le début des fichiers traitant des formulaires.

3) Je passe en register_global sur off, et je fais une sorte de béta publique en loggant les erreurs (et les notice).
4) Je corrige les notice. On détectera un problème avec register_global en voyant une variable appelée sans être créer.
5) Je passe en prod

Les erreurs à ne pas faire : sous-estimer le temps. C'est très long, cela explique pourquoi les solutions permettant d'activer register_global ou de le simuler fleurissent. Les hébergeurs proposent très souvent une configuration alternative.
Si vous lisez ce post, je pense qu'il est inutile de dire de faire une sauvegarde, mais peut-être que dire qu'un gestionnaire de version, même s'il faut une paire d'heure pour le mettre en place, vous fera gagner un temps fou serait une bonne idée wink.gif

Pourquoi faire tout ça ?
Pour moi :
  • amélioration des perfs sur site chargé (c'est constaté, mais à mon sens c'est à cause de la correction des notice)
  • je ne passerai pas cette appli à osc3, j'anticipe donc sereinement php6
  • j'améliore la sécurité


Voilà, en espérant que cela sera utile, n'hésitez pas à corriger si besoin, commenter, développer tongue.gif


--------------------
Go to the top of the page
 
Sweet
posté 13 Aug 2009, 21:06
Message #2


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 247
Inscrit : 11-November 06
Lieu : Lille
Membre no 13197



Bravo et merci ! voilà ce que je cherchais.

Par contre je bloque au point 1 :

comment faire "Pour logger les erreurs, soit on fait un trigger spécifique (voir doc php), soit via une directive dans le htacess. Cette dernière à l'avantage de logger les erreurs fatales également."

Je ne suis pas parvenu à trouver


--------------------
Allons sagement et doucement : trébuche qui court vite
Go to the top of the page
 
maxime
posté 14 Aug 2009, 06:56
Message #3


Ceinture verte OSC
Icône de groupe

Groupe : Membres
Messages : 576
Inscrit : 11-August 04
Membre no 3034



http://www.google.fr/#hl=fr&q=trigger+...8560435f438fb24
http://www.google.fr/#hl=fr&q=log+erre...8560435f438fb24

Premiers liens à chaque fois.


--------------------
Go to the top of the page
 
Sweet
posté 14 Aug 2009, 07:02
Message #4


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 247
Inscrit : 11-November 06
Lieu : Lille
Membre no 13197



J'avais pourtant cherché...

Mais pas sur les bons termes

Merci smile.gif


--------------------
Allons sagement et doucement : trébuche qui court vite
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 25th May 2013 - 18:33
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)