[RESOLU] compatibilité versions de php

Petit nouveau ! | 8 Messages

18 févr. 2025, 12:34

Bonjour,

Autant l'avouer tout de suite : je ne connais rien à php (et pas grand'chose à la programmation en général...)

Voilà mon problème : j'ai un site web qui fonctionne avec php 7.0.33-0ubuntu0.16.04.16 et, en le transferrant sur un serveur où est installé php PHP 7.4.33 il ne fonctionne plus... Initialement, la version de php était 8.3.16-1 (ça ne marchait pas non plus...) que j'ai rétrogradée en 7.4.33 pour voir, mais il semble que même 7.4 est trop "nouvelle"!

Existe-t-il des "modules" de compatibilité entre les différentes versions de php? Et si oui, lesquels?

Si j'exécute le fichier index.php "à la main" j'ai des "Warning" et des "Notice" du type:
PHP Notice: Undefined variable: menu
ou:
PHP Warning: count(): Parameter must be an array or an object that implements Countable

En cherchant sur le web, j'ai trouvé que pour les "Undefined variable", on pouvait ajouter "global" devant, mais ça supprime la notice sans rendre le site fontionnel pour autant...

Voilà. Quelqu'un peut-il m'aider?

Merci.

F.P.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 févr. 2025, 13:36

Un site utile pour voir l'obsolescence des versions : https://endoflife.date/php
En résumé :
- PHP 7.0, sorti il y a 9 ans est obsolète et n'a plus de mise à jour de sécurité depuis 6 ans
- PHP 7.4 est obsolète également, n'a plus de mise à jour de sécurité depuis 2 ans

En clair, la solution est de migrer ton site/application web vers une version récente de PHP 8.3 ou 8.4.
Faire les ajustements dans le code entre versions mineures est assez simple et rapide pour un dev, un peu plus compliqué entre les versions majeures, et encore + complexe quand il y a plusieurs versions de retard à rattraper, ce qui est ton cas ici.
:arrow: Il n'existe pas de module ou de "traducteur" automatique, il faut que tu passes par un développeur PHP qui ferra les tests et les adaptations nécessaires.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

18 févr. 2025, 19:21

Bonjour et merci d'avoir répondu.
En fait, le problème était simple: les fichiers php étaient rédigés en abrégé <? au lieu de <?php...

Il me reste un problème: une page fait une requête sql et cette requête n'aboutit pas sur le nouveau serveur; il doit manquer quelque chose à la configuration de php ou d'apache ou des deux et je n'arrive pas à trouver.

Existe-t-il un moyen de "voir" les requêtes de php qui ne sont pas satisfaites?

Merci.

F.P.

Petit nouveau ! | 8 Messages

18 févr. 2025, 23:54

J'ajoute, parce que cela me vient tout à coup à l'esprit: toutes les pages fonctionnent, y compris celle avec les requêtes sql, sur un serveur local (http://localhost) et cette page ne fonctionne pas sur des serveurs distants (y compris celui vers lequel se font les requêtes sql).

Merci à toute personne me donnant une idée pour résoudre le pb.

F.P.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 févr. 2025, 10:53

Es-tu sûr d'avoir bien mis les bons identifiants à la bdd MySQL de ton serveur distant ?
Sinon un truc indispensable pour débuguer efficacement c'est de regarder dans les logs PHP pour voir si il y a des erreurs. Vois dans la doc de ton hébergeur où se situe ces logs
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

19 févr. 2025, 12:10

Pour les login/mdp au serveur distant, je pense qu'il n'y a pas de problèmes sinon comment la page s'ouvrirait-elle correctement quand je fait marcher le site sur localhost?
Quand je dis "localhost", il s'agit de ma machine personnelle, chez moi, qui est distante du serveur sollicité. Dès que j'installe ce site web sur une machine distante et que je l'interroge de chez moi, la page est vide...

Les log : j'ai bien cherché où trouver les log php, mais les explications trouvées sur internet m'ont parues difficiles à comprendre et sur les serveurs où est installé php je ne vois aucun log concernant php.... (étant administrateur, j'ai accès à tout...)

Merci pour quelques lumières.

F.P.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 févr. 2025, 13:25

Pour les login/mdp au serveur distant, je pense qu'il n'y a pas de problèmes sinon comment la page s'ouvrirait-elle correctement quand je fait marcher le site sur localhost?
Car il est possible que la base de données soient aussi sur localhost quand tu testes en local, mais pas sûr que ce soit la même configuration quand tu mets ton script sur un serveur distant.
Les log : j'ai bien cherché où trouver les log php, mais les explications trouvées sur internet m'ont parues difficiles à comprendre et sur les serveurs où est installé php je ne vois aucun log concernant php.... (étant administrateur, j'ai accès à tout...)
Contacte ton hébergeur pour le savoir.
Si tu es sur une machine dédiée que tu administres toi même, alors fais un phpinfo() pour savoir où est situé le fichier log, probablement dans /var/log/apache2 , /var/log/php* ou qqch du genre
https://www.php.net/phpinfo
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

19 févr. 2025, 20:10

Non! Pour la base de données, je sais bien qu'elle n'est pas sur localhost...

J'ai trouvé les log. Quand je charge la page en question j'ai:
[19-Feb-2025 17:52:39 UTC] PHP Warning: include(/home/fp/public_html/Publis.html): Failed to open stream: Permission denied in /home/fp/public_html/index.php on line 189
[19-Feb-2025 17:52:39 UTC] PHP Stack trace:
[19-Feb-2025 17:52:39 UTC] PHP 1. {main}() /home/fp/public_html/index.php:0
[19-Feb-2025 17:52:39 UTC] PHP Warning: include(): Failed opening 'Publis.html' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /home/fp/public_html/index.php on line 189
[19-Feb-2025 17:52:39 UTC] PHP Stack trace:
[19-Feb-2025 17:52:39 UTC] PHP 1. {main}() /home/fp/public_html/index.php:0

Il n'y a pas de problème de permissions elles sont normales pour un accès internet (Unix 0755 et 0644).

Dans le php.ini allow_url_fopen est "on", j'ai mis aussi "on" allow_url_include (c'est peut-être idiot mais je ne connais pas php...) ça n'a rien changé.

Ce qui me rend perplexe, c'est que la page qui ne veut pas s'ouvrir quand elle est chargée depuis un serveur distant a *exactement* le même contenu html que la même page chargée depuis localhost... (quand on demande à voir le code source de la page sur le navigateur)

Cette page contient un lien internet (qui doit afficher le contenu demandé) qui s'affiche sans problème si on le met dans une page de test html...

Je ne comprend pas!

Merci.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 févr. 2025, 10:26

On est d'accord que :
Il n'y a pas de problème de permissions
est tout à fait contradictoire avec le message d'erreur :
Warning: include(/home/fp/public_html/Publis.html): Failed to open stream: Permission denied in /home/fp/public_html/index.php on line 189
Il y a un problème de permissions qui t'indique que l'utilisateur qui fait tourner PHP (Apache?) ne peux pas lire le fichier "Publis.html"


Si le fichier "index.php" et "Publis.html" sont dans le même répertoire, fais d'ailleurs un include en relatif, juste en mettant le nom du fichier, pas besoin de mettre son chemin complet depuis la racine du serveur.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

22 févr. 2025, 17:54

Il me semblait avoir précisé que les permissions concernaient les permissions unix d'accès au fichiers... Et c'est bien le cas! Pour ces accès, il n'y a pas de "permission denied"...

En fait, le déni vient du site interrogé qui refuse que l'on affiche ses liens dans un "iframe" ce qui était le cas, en supprimant cette clause, ça marche.

F.P.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 févr. 2025, 10:51

A mon avis tu mélanges deux choses différentes car le message d'erreur ne parle pas d'un include d'un site distant.
Mais l'essentiel est que ça fonctionne désormais. :-D
Je mets ce sujet en résolu.
Quand tout le reste a échoué, lisez le mode d'emploi...