THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline

#1 Thelia v1.5.4.3 pour php7

(16-03-2018 15:37:38)


Bonjour tous,

Pour faire suite au topic : http://forum.thelia.net/viewtopic.php?id=11055, je repart sur une base propre.
Nous savons déjà que la V1.5.4.3, ne passe même pas sur du php5.6, voir : http://forum.thelia.net/viewtopic.php?id=12052

Donc, nous allons essayer de faire quelque chose pour ce passage pour php7, c'est tout pour le moment et cela va ravir beaucoup d'utilisateurs de thelia qui ne veulent ou ne peuvent pas techniquement, mais voir l'autre topic.

J'ai donc installé la V1.5.4.3 sur wampserver (en rusant) et choisi php 7.1.9
J'ai installé le plugin "insertionproduit", la mini-boutique mise à dispo par thelia et vais suivre depuis le début pour ceux qui arrivent.

J'ouvre le site :

Warning: Declaration of Variable::charger($nom) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Variable.class.php on line 25

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in D:\wamp\www\thelia1543\classes\Cnx.class.php:32 Stack trace: #0 D:\wamp\www\thelia1543\classes\Cnx.class.php(59): StaticConnection::getHandle() #1 D:\wamp\www\thelia1543\classes\Requete.class.php(33): Cnx->__construct() #2 D:\wamp\www\thelia1543\classes\Baseobj.class.php(34): Requete->__construct() #3 D:\wamp\www\thelia1543\classes\Variable.class.php(40): Baseobj->__construct() #4 D:\wamp\www\thelia1543\classes\Variable.class.php(61): Variable->__construct('utilisercachepl...') #5 D:\wamp\www\thelia1543\classes\actions\ActionsModules.class.php(26): Variable::lire('utilisercachepl...') #6 D:\wamp\www\thelia1543\classes\actions\ActionsModules.class.php(30): ActionsModules->__construct() #7 D:\wamp\www\thelia1543\fonctions\moteur.php(29): ActionsModules::instance() #8 D:\wamp\www\thelia1543\index.php(28): require('D:\\wamp\\www\\the...') #9 {main} thrown in D:\wamp\www\thelia1543\classes\Cnx.class.php on line 32

Normal, mais yoan a donné un script, dans classes/Cnx.class.php tu ajoutes juste après require_once(__DIR__."/../client/config_thelia.php"); le code suivant :

if(! function_exists('mysql_query')){
     function mysql_query($query, $link = null) {
        return mysqli_query($link, $query);
    }

     function mysql_fetch_object($resul) {
        return mysqli_fetch_object($resul);
    }

    function mysql_result($res,$row=0,$col=0){ 
        return mysqli_result($res,$row=0,$col=0);
    }    

    function mysql_num_rows($res){
        return mysqli_num_rows($res);
    }
}

Je relance le site :

Warning: Declaration of Variable::charger($nom) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Variable.class.php on line 25

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in D:\wamp\www\thelia1543\classes\Cnx.class.php:50 Stack trace: #0 D:\wamp\www\thelia1543\classes\Cnx.class.php(77): StaticConnection::getHandle() #1 D:\wamp\www\thelia1543\classes\Requete.class.php(33): Cnx->__construct() #2 D:\wamp\www\thelia1543\classes\Baseobj.class.php(34): Requete->__construct() #3 D:\wamp\www\thelia1543\classes\Variable.class.php(40): Baseobj->__construct() #4 D:\wamp\www\thelia1543\classes\Variable.class.php(61): Variable->__construct('utilisercachepl...') #5 D:\wamp\www\thelia1543\classes\actions\ActionsModules.class.php(26): Variable::lire('utilisercachepl...') #6 D:\wamp\www\thelia1543\classes\actions\ActionsModules.class.php(30): ActionsModules->__construct() #7 D:\wamp\www\thelia1543\fonctions\moteur.php(29): ActionsModules::instance() #8 D:\wamp\www\thelia1543\index.php(28): require('D:\\wamp\\www\\the...') #9 {main} thrown in D:\wamp\www\thelia1543\classes\Cnx.class.php on line 50

yoan intervient de nouveau et propose directement le fichier Cnx.class.php

<?php
/*************************************************************************************/
/*                                                                                   */
/*      Thelia                                                                       */
/*                                                                                   */
/*      Copyright (c) OpenStudio                                                     */
/*      email : thelia@openstudio.fr                                                 */
/*      web : http://www.openstudio.fr                                               */
/*                                                                                   */
/*      This program is free software; you can redistribute it and/or modify         */
/*      it under the terms of the GNU General Public License as published by         */
/*      the Free Software Foundation; either version 3 of the License                */
/*                                                                                   */
/*      This program is distributed in the hope that it will be useful,              */
/*      but WITHOUT ANY WARRANTY; without even the implied warranty of               */
/*      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
/*      GNU General Public License for more details.                                 */
/*                                                                                   */
/*      You should have received a copy of the GNU General Public License            */
/*   Â  Â along with this program. Â If not, see <http://www.gnu.org/licenses/>.        */
/*                                                                                   */
/*************************************************************************************/
require_once(__DIR__."/../client/config_thelia.php");


if(! function_exists('mysql_query')){
     function mysql_query($query, $link = null) {
        return mysqli_query($link, $query);
    }

     function mysql_fetch_object($resul) {
        return mysqli_fetch_object($resul);
    }

    function mysql_result($res,$row=0,$col=0){ 
        return mysqli_result($res,$row=0,$col=0);
    }    

    function mysql_num_rows($res){
        return mysqli_num_rows($res);
    }
}

function mysqli_result($res,$row=0,$col=0){ 
    $numrows = mysqli_num_rows($res); 
    if ($numrows && $row <= ($numrows-1) && $row >=0){
        mysqli_data_seek($res,$row);
        $resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
        if (isset($resrow[$col])){
            return $resrow[$col];
        }
    }
    return false;
}   

class StaticConnection {

    public static $db_handle = -1;

    public static function getHandle() {
        if (self::$db_handle == -1) {

            self::$db_handle = @mysqli_connect(
                            THELIA_BD_HOST,
                            THELIA_BD_LOGIN,
                            THELIA_BD_PASSWORD) or die('Le serveur de base de données n\'est pas accessible.');

            mysqli_query(self::$db_handle, "SET NAMES UTF8");

            if (! self::$db_handle && $_REQUEST['erreur'] != 1) {
                    header('HTTP/1.1 503 Service Temporarily Unavailable');
                    header('Status: 503 Service Temporarily Unavailable');

                    die("Connexion à la base de données impossible");
            }

            mysqli_select_db(self::$db_handle, THELIA_BD_NOM) or die('Echec de selection de la base de données.');
        }

        return self::$db_handle;
    }
}

Je relance le site ....... c'est mieux :

Fatal error: Class 'Cnx' not found in D:\wamp\www\thelia1543\classes\Requete.class.php on line 28

1244.png

Bon, on avance, attendons les réponses.

  • yoan
  • Cofondateur Thelia

Offline


Il manque la fin de ton fichier Cnx.class.php effectivement avec la classes Cnx.

Sinon pour revenir sur cette modification de Cnx.class.php, il est fort probable que ça ne suffise pas pour un fonctionnement optimal en PHP7. Je n'ai pas eu le temps de tester précisément. C'est d'ailleurs le but de la manoeuvre.

1) commencer par avoir un accès à la base de données fonctionnel
2) pouvoir détecter les autres problèmes liés au passage en PHP7
3) estimer le temps nécessaire pour aller plus loin
4) ... à définir smile


http://yoandemacedo.com

Cofondateur de la solution Thelia 1.x

Offline


RE

yoan wrote:

Il manque la fin de ton fichier Cnx.class.php effectivement avec la classes Cnx.

Effectivement, je n'avais pas mis correctement ton dernier fichier, excuse moi. sad

Le principal est de pouvoir afficher le site et le BO afin de faire les tests.
Je relance le site, maintenant il s'affiche mais avec des erreurs :

EDIT: le FO s'affiche, le BO, que les erreurs et pas les mêmes.

Warning: Declaration of Variable::charger($nom) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Variable.class.php on line 25
Warning: Declaration of Modules::charger($nom) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Modules.class.php on line 25
Warning: Declaration of Administrateur::charger($identifiant, $motdepasse) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Administrateur.class.php on line 0
Warning: Declaration of Client::charger($email, $motdepasse) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Client.class.php on line 0
Warning: Declaration of Commande::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Commande.class.php on line 0
Warning: Declaration of Promo::charger($code) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Promo.class.php on line 0
Warning: Declaration of Adresse::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Adresse.class.php on line 0
Warning: Declaration of PluginsPaiements::mail($commande) should be compatible with PluginsClassiques::mail() in D:\wamp\www\thelia1543\classes\PluginsPaiements.class.php on line 26
Warning: Declaration of Baseobjdesc::exist_key($key, $value, $table, $lang) should be compatible with Baseobj::exist_key($key, $value, $table, $lang = NULL) in D:\wamp\www\thelia1543\classes\Baseobjdesc.class.php on line 0
Warning: Declaration of Modulesdesc::charger($plugin, $lang = false) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Modulesdesc.class.php on line 25
Warning: Declaration of Venteprod::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Venteprod.class.php on line 0
Warning: Declaration of Caracdisp::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Caracdisp.class.php on line 0
Warning: Declaration of Caracdispdesc::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Caracdispdesc.class.php on line 0
Warning: Declaration of Caracteristique::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Caracteristique.class.php on line 0
Warning: Declaration of Caracteristiquedesc::charger($caracteristique, $lang = false) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Caracteristiquedesc.class.php on line 0
Warning: Declaration of Caracval::charger($produit, $caracteristique) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Caracval.class.php on line 0
Warning: Declaration of Contenu::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Contenu.class.php on line 0
Warning: Declaration of Contenudesc::charger($contenu, $lang = false) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Contenudesc.class.php on line 25
Warning: Declaration of Declidisp::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Declidisp.class.php on line 0
Warning: Declaration of Declidispdesc::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Declidispdesc.class.php on line 0
Warning: Declaration of Declinaison::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Declinaison.class.php on line 0
Warning: Declaration of Declinaisondesc::charger($declinaison, $lang = false) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Declinaisondesc.class.php on line 0
Warning: Declaration of Image::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Image.class.php on line 0
Warning: Declaration of Produit::charger($ref) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Produit.class.php on line 0
Warning: Declaration of Rubcaracteristique::charger($rubrique, $caracteristique) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Rubcaracteristique.class.php on line 0
Warning: Declaration of Rubdeclinaison::charger($rubrique, $declinaison) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Rubdeclinaison.class.php on line 0
Warning: Declaration of Rubrique::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Rubrique.class.php on line 0
Warning: Declaration of Rubriquedesc::charger($rubrique, $lang = false) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Rubriquedesc.class.php on line 0
Warning: Declaration of Stock::charger($declidisp, $produit) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Stock.class.php on line 0
Warning: Declaration of Lang::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Lang.class.php on line 0
Warning: Declaration of Devise::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Devise.class.php on line 0
Warning: Declaration of Pays::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Pays.class.php on line 0
Warning: Declaration of Reecriture::charger($url) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Reecriture.class.php on line 0
Warning: Declaration of Produitdesc::charger($produit, $lang = false) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Produitdesc.class.php on line 0
Warning: Declaration of Dossierdesc::charger($dossier, $lang = false) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Dossierdesc.class.php on line 0
Warning: Declaration of Zone::charger($id) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Zone.class.php on line 0
Warning: Declaration of Imagedesc::charger($image, $lang = false) should be compatible with Requete::charger() in D:\wamp\www\thelia1543\classes\Imagedesc.class.php on line 0
Warning: Declaration of TlogDestinationConfig::charger() should be compatible with Variable::charger($nom) in D:\wamp\www\thelia1543\classes\tlog\TlogDestinationConfig.class.php on line 0

Last edited by griggione (16-03-2018 16:50:20)

Offline


Il va manquer beaucoup de fonctions mysql_* pour faire tourner un Thelia 1. Voilà ce qu'un grep nous donne sur un Thelia 1 et tous les plugins du SVN :

mysql_close
mysql_connect
mysql_create_db
mysql_data_seek
mysql_db_name
mysql_errno
mysql_error
mysql_fetch_array
mysql_fetch_assoc
mysql_fetch_object
mysql_fetch_row
mysql_field_name
mysql_field_table
mysql_free_result
mysql_insert_id
mysql_list_dbs
mysql_num_fields
mysql_num_rows
mysql_query
mysql_query_count
mysql_real_escape_string
mysql_result
mysql_select_db

(liste obtenue avec find . -name '*.php' -exec egrep -o 'mysql_[a-z0-9_]+' {} \; | sort | uniq)

Bien sûr, ce n'est pas exhaustif, et il manque surement des fonctions utilisées par d'autres plugins.

Je me répète un peu, mais bon, pour émuler une grande partie de ces fonctions, et les placer dans le namespace global, regardez ce projet: https://github.com/mattbit/mysql-compat


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Bonjour tous,

Concretement, par rapport à cette liste, il faudrait faire quoi ?

yoan wrote:

1) commencer par avoir un accès à la base de données fonctionnel
2) pouvoir détecter les autres problèmes liés au passage en PHP7
3) estimer le temps nécessaire pour aller plus loin
4) ... à définir

Est-ce que le fait d'avoir un affichage FO (même avec les erreurs) confirme ou infirme l'accés à la BDD ?
Est-ce que le fait de n'avoir que les erreurs en BO confirme ou infirme l'accés à la BDD ?

Bref, l'étape suivante, c'est quoi ?

Last edited by griggione (05-04-2018 12:50:32)

  • yoan
  • Cofondateur Thelia

Offline


Le projet proposé par Roadster a l'air sympa mais il manque aussi des choses quand on regarde la Todo : https://github.com/mattbit/mysql-compat (en bas de la page)


http://yoandemacedo.com

Cofondateur de la solution Thelia 1.x

Offline


C'est une bonne occasion de contribuer à ce projet.


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


RE

Bien, les affaires reprennent ... smile

1- Dans la Todo, les cases cochées, cela veut dire que la modification a été faite ?

Autre question bête pour ceux qui ne dévellopent pas :
2- Est-ce que le fait d'avoir un affichage FO (même avec les erreurs) confirme ou infirme l'accés à la BDD ?
3- Est-ce que le fait de n'avoir que les erreurs en BO confirme ou infirme l'accés à la BDD ?

  • yoan
  • Cofondateur Thelia

Offline


Tout à fait. On en revient un peu toujours au même. Il faut voir qui est prêt à mettre un peu d'argent là dessus et qui peut le prendre en charge.
J'imagine, que contre rémunération, un dev ici pourrait être intéressé par ça.

De mon côté, en ce moment, je n'ai pas le temps. Donc si le besoin est pressant, ce n'est pas jouable pour moi.
Mais il y a du monde ici qui connaît Thelia 1.

Last edited by yoan (05-04-2018 13:09:11)


http://yoandemacedo.com

Cofondateur de la solution Thelia 1.x

Offline


Mais pas grand monde pour mettre la main à la poche, comme souvent smile


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


RE

roadster31 wrote:

Mais pas grand monde pour mettre la main à la poche, comme souvent smile

C'est vrai mais vu le devis .......

roadster31 wrote:

A vue de nez, si on réunit 5 ou 6000 euros, ça devrait faire une base pour redémarrer le projet.

Juste pour passer au php7, c'est une somme !!!

A la rigueur, pour les plugins, chacun mettrait la main à la poche pour ceux qui concernent leur site.

Offline


L'estimation que tu mentionne concerne un redémarrage du projet Thelia 1, et pas "juste un passage au php7". Pour un portage PHP 7 à l'arrache, il y aura sans doute moins de temps à passer.


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Bonjour roadster31,

roadster31 wrote:

Pour un portage PHP 7 à l'arrache, il y aura sans doute moins de temps à passer.

C'est justement le theme de ce topic big_smile ...... donc si tu as une estimation ?

Offline


Non, je n'ai absolument pas le temps de m'en occuper en ce moment (et pas très envie non plus).


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

  • yoan
  • Cofondateur Thelia

Offline


Je crois qu'on arrive au bout d'un cycle.
Peut-être est-il temps de passer sur Thelia 2 pour ceux qui veulent ou une autre solution pour ceux qui souhaitent un fonctionnement différent ?

Toutefois je viens de tomber là dessus :
https://sourceforge.net/projects/mysqlwithmysqli/

Je n'ai pas testé mais il semble avoir l'ensemble des fonctions sauf mysql_query_count

Cette fonction n'est pas utilisée par le noyau.
Par un plugin peut-être.

Il reste donc à tester ça et à voir si le manque des fonctions mysql est la seule chose qui gêne pour le passage à PHP7.

Concernant tes warning Griggione, il suffit de les masquer.

Last edited by yoan (09-04-2018 10:20:27)


http://yoandemacedo.com

Cofondateur de la solution Thelia 1.x