IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Code 4.3.3 ne fonctionne plus en 8.0


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 363
    Par défaut Code 4.3.3 ne fonctionne plus en 8.0
    Bonjour tout le monde, BONNE ANNÉE !

    J'essaie de faire tourner une appli écrite en php 4.3.3 sur mon serveur Infomaniak en 8.0 tout neuf.
    Je n'ai trouvé qu'une instruction déprécatée, ereg, que j'ai remplacée par preg_match avec succès.
    Si je ne demande qu'une seule conversion (voir ici le programme qui fonctionne sous 4.3.3 : http://aoineko.free.fr/), tout va bien.
    Mais, dans une boucle, j'ai une erreur :

    Warning: Illegal string offset 'anx' in /wikihiero/wikihiero.php on line 618

    Je regarde la ligne en question, qui me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    617: $code = $wh_phonemes[$glyph];
    618:      if(array_key_exists($code, $wh_files))
            return "<img style='margin:".WH_IMG_MARGIN."px;' $option src='".htmlspecialchars(WH_IMG_DIR.WH_IMG_PRE."{$code}.".WH_IMG_EXT)."' title='".htmlspecialchars($code[$glyph])."' alt='".htmlspecialchars($glyph)."' />";
    619:      else
    anx c'est le nom translittéré du glyphe dans ma base de données d'images, qui vaut S34 dans mon dico, donc ce sera l'image hiero_S34.png. D'où peut venir ce dysfonctionnement en changeant de version, svp ?
    Mon programme qui ne marche pas est ici : https://shpylgoreih.fr/wikihiero/index.php?lang=fr
    Merci d'avance au(x) magicien(s) qui trouvera(ront) la soluce !
    A++

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    PHP 4.3.3 ? Wow, cela date de quasi 20 ans (https://www.php.net/ChangeLog-4.php#4.3.3).


    Fait un echo "<pre>".print_r($code, true) . "</pre>"; pour voir que contient ton array.

    Selon toutes vraisemblance, la clef anx serait absente.

  3. #3
    Membre éclairé
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 363
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    PHP 4.3.3 ? Wow, cela date de quasi 20 ans (https://www.php.net/ChangeLog-4.php#4.3.3).
    Fait un echo "<pre>".print_r($code, true) . "</pre>"; pour voir que contient ton array.
    Selon toute vraisemblance, la clef anx serait absente.
    2004
    Si, j'ai bien mon "anx" et sa valeur : S34 (j'ai ajouté un print_r($wh_files, true))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >S34<
       [S34] => Array
            (
                [0] => 20
                [1] => 38
            )
    Mais je n'ai plus le même message d'erreur :

    Fatal error: Uncaught TypeError: Cannot access offset of type string on string in /home/clients/468f999288a51c6928fb625d73212251/sites/shpylgoreih/wikihiero/wikihiero.php:622
    Stack trace: #0
    /home/clients/468f999288a51c6928fb625d73212251/sites/shpylgoreih/wikihiero/wikihiero.php(895): WH_RenderGlyph('anx', 'height='38px'') #1 /home/clients/468f999288a51c6928fb625d73212251/sites/shpylgoreih/wikihiero/wikihiero.php(699): WikiHieroHTML('anx', '100', false) #2 /home/clients/468f999288a51c6928fb625d73212251/sites/shpylgoreih/wikihiero/index.php(94): WikiHiero('anx', '1', '100', false) #3 {main} thrown in /home/clients/468f999288a51c6928fb625d73212251/sites/shpylgoreih/wikihiero/wikihiero.php on line 622
    Si quelqu'un a envie de s'y coller, le source est ici : http://aoineko.free.fr/wikihiero.zip
    et il faut changer cette ligne dans wikihiero.php pour indiquer où est le dossier img :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define("WH_IMG_DIR", "$wgScriptPath/extensions/wikihiero/img/" ); //"img/");
    Citation Envoyé par Séb. Voir le message
    C'est comme si tu voulais accéder à la clef "anx" d'un tableau alors que $code est une chaîne.
    Cela voudrait dire qu'avant, c'était autorisé ?

    EDIT : j'ai porté l'appli dans ma page perso chez Free et ça marche parfaitement : http://didier.morandi.free.fr/wikihi...ex.php?lang=fr
    C'est donc le 8.0 qui m*rde...

    La 7.4 me donne le résultat correct plus une floppée d'erreurs Warning: Illegal string offset 'anx' mais c'est un warning, donc non fatal.

  4. #4
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Citation Envoyé par Toulousaing Voir le message
    C'est donc le 8.0 qui m*rde......mais c'est un warning, donc non fatal.
    Ah non non ... conclusion trop hâtive que la tienne ... ;-)

    PHP évolue et quitte son passé où l'on faisait n'importe quoi. Il évolue dans le bon sens en étant plus restrictif. Un exemple : vouloir supprimer un fichier qui n'existe pas générait un warning maintenant (php 8) une erreur fatale et c'est vraiment mieux.

    Le développeur qui souhaite supprimer un fichier s'attends à ce que le fichier existe (sinon pourquoi voudrait-il le supprimer). Il est bon et sain d'alerter le développeur (oui, en erreur fatale) afin qu'il sache que quelque chose n'est pas normal. A lui à p.ex. d'abord s'assurer que le fichier existe.

    Utiliser une variable (p.ex. echo $uneVar) qui n'existe pas donnait une warning; accéder à un index tel que $arr[10] qui n'existe pas, etc. ce sont des erreurs de conception et le développeur doit en être alerté. Le code PHP qui est alors produit est de meilleure qualité, plus robuste, plus lisible, ...

    L'évolution de PHP va dans le bon sens.

  5. #5
    Membre éclairé
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 363
    Par défaut
    Oui alors là je suis d'accord.
    Donc tu es en train de dire que le warning d'aujourd'hui existait déjà mais comme il n'empêchait pas le programme de fonctionner, il n'était pas affiché, c'est cela ?

  6. #6
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Ce que je dis c'est que la programmation sous PHP 4 pouvait être portnawak, qu'elle l'était encore mais un peu moins avec PHP 5 et qu'au fil du temps, PHP informe le programmeur avec des notices, puis des warnings puis, depuis PHP 8, a augmenté encore d'un cran et maintenant ce sont des erreurs fatales. C'est la même idée avec les fonctions qui sont existantes, puis dépréciées puis finalement supprimées.

    Citation Envoyé par Toulousaing Voir le message
    Oui alors là je suis d'accord.
    Donc tu es en train de dire que le warning d'aujourd'hui existait déjà mais comme il n'empêchait pas le programme de fonctionner, il n'était pas affiché, c'est cela ?
    Oui, probable... Tu dois forcer l'affichage des erreurs : https://www.php.net/manual/fr/functi...-reporting.php

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Ceci n'est pas autorisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $glyph = 'anx';
    htmlspecialchars($code[$glyph]);
    C'est comme si tu voulais accéder à la clef "anx" d'un tableau alors que $code est une chaîne.

Discussions similaires

  1. [MySQL] Vieux code php (2008) qui ne fonctionne plus sous php5
    Par spectrom dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 15/02/2016, 22h01
  2. [WD14E] BUG : l'ensemble des codes d'une fenetre ne fonctionnent plus.
    Par Sergeras dans le forum WinDev
    Réponses: 3
    Dernier message: 22/08/2011, 02h49
  3. code vba qui fonctionnes plus du jour au lendemain
    Par alexkickstand dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/07/2008, 16h41
  4. Codes ne fonctionnant plus !
    Par PC_BE dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/04/2008, 14h27
  5. Codes qui ne fonctionne plus
    Par FCL31 dans le forum VBA Access
    Réponses: 18
    Dernier message: 08/11/2007, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo