Migration PHP 5.2.x vers PHP 5.3.x
Posté : 27 févr. 2014, 12:02
Bonjour,
Je viens de récupérer la gestion d'un site de réservation d'une association.
En 2008, le site a été crée, la gestion des pages web assuré par des scripts en PHP 4.x.
Suite à la montée en version successive de PHP de notre hébergeur, le site à fonctionné sans aucun problème jusqu'à la version PHP 5.2.x comprise.
Le site vient de passer en PHP 5.3.x, le site ne fonctionne plus avec cette nouvelle version.
L'analyse des scripts (environ 170 fichiers PHP soit plus de 57000 lignes de code) montre un forte utilisation des objets.
Les objets ont été utilisés comme de simples variables (beaucoup d'affections du type ObjetA=ObjetB), ce qui à priori ne posait pas de problème en PHP 4.x puisque que les objets étaient appelés par "valeur".
Depuis PHP 5.x, les objets sont appelés par "référence", donc après une affectation ObjetA=ObjetB, ObejtA et ObjetB pointent vers la même adresse et toute modification de ObjetA et reportée sur ObjetB.
Ce qui explique le plantage complet de notre site de réservation.
Mes interrogations :
(1) : pourquoi, malgré cette manipulation des objets par "valeur" a-t-elle fonctionné correctement jusqu'en PHP 5.2.x inclus ?
(2) : en PHP 5.1.x et PHP 5.2.x, y-a-t-il une directive globale qui permet de "forcer" pour tous les scripts les appels par "valeur" des objets ?
(3) : en PHP 5.3.x et suivant, y-a-t-il un moyen de "forcer" pour tous les scripts les appels par "valeur" des objets ? y-a-t-il un autre moyen de contourner ce problème ?
Cordialement.
Je viens de récupérer la gestion d'un site de réservation d'une association.
En 2008, le site a été crée, la gestion des pages web assuré par des scripts en PHP 4.x.
Suite à la montée en version successive de PHP de notre hébergeur, le site à fonctionné sans aucun problème jusqu'à la version PHP 5.2.x comprise.
Le site vient de passer en PHP 5.3.x, le site ne fonctionne plus avec cette nouvelle version.
L'analyse des scripts (environ 170 fichiers PHP soit plus de 57000 lignes de code) montre un forte utilisation des objets.
Les objets ont été utilisés comme de simples variables (beaucoup d'affections du type ObjetA=ObjetB), ce qui à priori ne posait pas de problème en PHP 4.x puisque que les objets étaient appelés par "valeur".
Depuis PHP 5.x, les objets sont appelés par "référence", donc après une affectation ObjetA=ObjetB, ObejtA et ObjetB pointent vers la même adresse et toute modification de ObjetA et reportée sur ObjetB.
Ce qui explique le plantage complet de notre site de réservation.
Mes interrogations :
(1) : pourquoi, malgré cette manipulation des objets par "valeur" a-t-elle fonctionné correctement jusqu'en PHP 5.2.x inclus ?
(2) : en PHP 5.1.x et PHP 5.2.x, y-a-t-il une directive globale qui permet de "forcer" pour tous les scripts les appels par "valeur" des objets ?
(3) : en PHP 5.3.x et suivant, y-a-t-il un moyen de "forcer" pour tous les scripts les appels par "valeur" des objets ? y-a-t-il un autre moyen de contourner ce problème ?
Cordialement.