Page 1 sur 2

Migration code php4 vers php5

Posté : 08 avr. 2009, 23:47
par Henri KI ?
Bonjour à tous,

Je suis chargé de remettre en ligne un ancien site codé en php4.
Mon serveur est en php5 et j'ai beaucoup d'erreurs. Quelqu'un ici m'a déjà enlevé une bonne épine du pied, mais je n'ai pas réglé tous les problèmes rencontrés pour l'instant.
Plutôt que de réinstaller une version antérieure de l'OS sur le serveur, je me dis qu'il serait mieux de rendre ce code compatible php5 afin de pouvoir le faire évoluer plus tard.

Avant de vous poster des exemples types d'erreurs que je rencontre, j'aimerais essayer de faire ça comme un grand pour apprendre. Je réalise en ouvrant les fichiers qui posent problèmes que mon éditeur de texte me met des choses en rose et en noir, et que ces textes ou variables là n'apparaissent jamais dans mes erreurs. En revanche, j'ai l'impression que certaines choses écrites en vert semblent être les choses qui posent problème (mais pas toutes visiblement, d'où mon embarras).
Ma question est donc la suivante :
La coloration syntaxique peut-elle m'aider à trouver les codes php4 qui ne sont plus compatibles avec php5 ? Si oui, comment ?

Merci d'avance à l'âme charitable qui passera par là et éclairera un noob de ses lumières.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 08 avr. 2009, 23:49
par Henri KI ?
Désolé pour le double post... faudrait que je m'inscrive pour pouvoir éditer en fait.

Bien sûr si quelqu'un passe par là et connait LE (ou "les", ou "un" !) liens à lire, qu'il n'hésite pas à me le donner :)

Merci.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 09 avr. 2009, 01:09
par Elie
Euh bah faudrait effectivement que l'on voit certaintes erreurs et la ligne pour te dire ce qui ne va pas !

Posté : 09 avr. 2009, 08:11
par stopher
Slt ,

La coloration syntaxique aide effectivement à déboguer ( A si je tenais ceux qui m'ont obligé à commencer le php avec le wordPad :twisted: ) ..

Cependant , cette coloration varie d'un éditeur à un autre, et ne peut donc te permettre de trouver les différences php4 / php5 .

Donne nous tes messages d'erreur et le code qui les génères , que l'on puisse t'aider à déboguer tt ça .. :-)

Ch.

Posté : 09 avr. 2009, 22:52
par Henri KI ?
Bon, pour être honnête avec vous (vous allez vous foutre de moi !),
J'ai essayé 3 bonnes heures hier de comprendre ça avec l'aide de google et en testant différents trucs, mais j'ai fini par la jouer flemmard et installer php4 !

En revanche je comptais quand même essayer de débogguer le code grâce à votre aide sur mon serveur de test en local sur du php5.
J'ai donc refait les manips qui m'avaient permis d'arriver aux dernières erreurs mentionnées dans ce post (voir mon post sur mon problème d'include-once (/common) etc.
Et bien je ne comprends pas, mais je n'arrive pas à revenir à où j'en étais sur l'autre serveur avant de désinstaller php5.

Enfin bref, j'ai fait le gros boulet et je n'ai malheureusement plus rien à montrer pour l'instant.

Dès que j'ai réussi à remettre la version php5 un peu d'aplomb je viendrais vous solliciter par contre, parce que ça fait plaisir de voir qu'il y a ici des gens prêts à aider les bons gros noobs !

Et puis j'en profiterais pour me créer un compte, c'est génial que les invités puissent poster, mais faudrait que j'arrête d'abuser là !

En tous cas merci à vous :)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 10 avr. 2009, 23:10
par Henri KI ?
Bon :)

Concernant mon code et sa compatibilité php5, je ne sais pas si c'est en rapport, mais j'ai cru comprendre que cette "fonction" (array) (excusez les termes que j'emploie faute d'une meilleure connaissance) pose problème en php4->php5.

J'ai une page qui m'affiche cette erreur :

Code : Tout sélectionner

Catchable fatal error: Object of class XMLPrinter could not be converted to string in /lib_xml.php on line 10
Le fichier lib_xml comprend ceci à la ligne 10 :

Code : Tout sélectionner

$$this->stack=array();
Voici le fichier complet pour que vous ayez cette ligne dans son contexte si besoin.
Je ne sais pas si ça change quelque-chose mais mon serveur balance de l'UTF-8 il me semble, tandis que ce doc parle d'ISO, cela peut-il poser un problème de manière générale ?

Code : Tout sélectionner

<? class XMLPrinter { //public part function XMLPrinter() { $this->encoding="ISO-8859-1"; [B]$$this->stack=array();[/B] } function header() { echo "<?xml version=\"1.0\" encoding=\"$this->encoding\"?>\n"; } function pushNode($nodename,$attributes="") { echo $this->spaces()."<$nodename".$this->args2string($attributes).">\n"; $this->push($nodename); } function popNode($nodename) { $stacknode=$this->pop(); if ($stacknode!=$nodename) { $this->error("XmlPrinter: Poping Node: expecting '$stacknode' instead of '$nodename'"); } echo $this->spaces()."</$nodename>\n"; } function simpleNode($node,$value,$attributes="") { echo $this->spaces()."<$node".$this->args2string($attributes).">".$this->encode($value)."</$node>\n"; } //private part var $stack; var $encoding; function stackSize() { return count($this->stack); } function push($node) { $this->stack[$this->stackSize()]=$node; } function pop() { if ($this->stackSize()==0) { $this->error("XmlPrinter: Stack is empty"); } $node=$this->stack[$this->stackSize()-1]; unset($this->stack[$this->stackSize()-1]); return $node; } function args2string($args) { if (!$args) return; foreach ($args as $arg => $value) { $str .= " $arg=\"".$this->encode($value)."\""; } return $str; } function spaces() { $nb=$this->stackSize(); for ($i=0; $i<$nb; $i++) { $str .= " "; } return $str; } function error($msg) { $stacktrace=debug_backtrace(); foreach ($stacktrace as $call) { $file=$call['file']; if (!strpos($file,"lib_xml.php")) { $line=$call['line']; trigger_error("(called from $file:$line) $msg", E_USER_ERROR); exit(); } } } function encode($str) { return htmlspecialchars($str); } } ?>
Voila pour le premier qui me pose problème, il y en a d'autres malheureusement...

Merci d'avance à celui (ceux) qui tentera(ont) de me sauver le week-end :)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 14 avr. 2009, 18:43
par Henri KI ?
Salut à tous,

Je me permets un petit up car malgré toute l'énergie que j'ai pu y consacrer (j'ai lu presque tout un bouquin sur le php ce week-end (je suis en train de le terminer), je suis déjà moins naze qu'avant, mais loin d'être au point) je n'arrive pas à trouver une piste pour arranger ce problème...

Google non plus ne m'a été d'aucune aide pour l'instant.

Si une âme charitable passe par ici...

Merci à vous de m'avoir lu.

Posté : 14 avr. 2009, 18:49
par Calimero
Une idée comme ça : As-tu tenté d'enlever un des deux $ de cette ligne ?

Posté : 14 avr. 2009, 19:03
par Henri KI ?
Non mais je vais essayer tout de suite :)
Merci pour la piste, j'essaie et je vous dit ce que ça donne.

Edit :
C'était ça !
Génial, merci beaucoup à toi, tu me retires une sacrée épine du pied, dire que j'ai passé 3 jours à essayer de régler ça (en même temps j'ai appris pleins de choses qui me seront utiles).

Posté : 14 avr. 2009, 19:04
par Elie
On connait deja la réponse :)

Posté : 14 avr. 2009, 19:55
par Calimero
Content d'avoir pu t'aider ;-)

Le double $ en php a une signification très spéciale et on ne le rencontre que rarement et dans des contextes bien déterminés. C'est par contre très facile d'en insérer un par erreur dans le code suite à une typo.

Posté : 14 avr. 2009, 20:06
par Henri KI ?
Merci pour cette explication qui me mène tout de même a poser une question.

Le site dont je parle a été codé par quelqu'un d'autre, il fonctionnait parfaitement à l'époque où il était en ligne (php4 en revanche, sachant que mon apache est php5).
Je viens de vérifier dans les sources, il y a bien $$
Serait-il possible que ce code avec $$ fonctionne en réalité mais que le problème vienne de la suite ? J'ai du mal à exprimer l'idée, ce que je veux dire c'est que peut-être qu'une configuration ailleurs empêche ce $$ de fonctionner. C'est sans doute tiré par les cheveux, et puis ça a l'air de bien marcher comme ça donc je pense que c'est ok.

Encore merci à toi.

Posté : 14 avr. 2009, 20:18
par Calimero
Le site dont je parle a été codé par quelqu'un d'autre, il fonctionnait parfaitement à l'époque où il était en ligne (php4 en revanche, sachant que mon apache est php5).
Je viens de vérifier dans les sources, il y a bien $$
Serait-il possible que ce code avec $$ fonctionne en réalité mais que le problème vienne de la suite ? J'ai du mal à exprimer l'idée, ce que je veux dire c'est que peut-être qu'une configuration ailleurs empêche ce $$ de fonctionner. C'est sans doute tiré par les cheveux, et puis ça a l'air de bien marcher comme ça donc je pense que c'est ok.
Ben justement, dans ton code ce $$ n'a pas lieu d'être en fait. C'est ce qui m'a amené à te faire cette suggestion. ($this->stack est un tableau, et son accès en tant que nom de variable dans ce cas n'aurait aucun sens).

Il est possible que php4 aie toléré cette erreur par erreur :) C'est la seule thèse plausible pour moi. Notamment, php4 avait en interne une gestion différente du mot-clé $this qui autorisait des choses qui ne fonctionneraient plus maintenant en php5.

Posté : 14 avr. 2009, 20:53
par Henri KI ?
Merci à toi d'avoir pris le temps de m'expliquer ça. Me voila 100% rassuré :)

Posté : 14 avr. 2009, 23:01
par zeus
Modération :
Henri95, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.