comment rendre compatible Arfooo 2.0.2 avec php 7 et plus

Trouvez ici tout l'aide dont vous avez besoin concernant le script d'annuaire Arfooo.
Merci de reporter les éventuels bugs trouvés.

comment rendre compatible Arfooo 2.0.2 avec php 7 et plus

Messagede web2 » Dim 3 Fév 2019 15:06

Bonjour,
Pouvez vous m'aidé a rendre compatible Arfooo 2.0.2 avec php ( PHP 7 / PHP 7.1 / PHP 7.2)
Merci
web2
 
Messages: 22
Inscription: Ven 12 Juin 2009 14:03


Re: comment rendre compatible Arfooo 2.0.2 avec php 7 et plu

Messagede Bodyboard » Sam 2 Mar 2019 18:07

Bonjour,

Arfooo Ultimate est compatible avec php7.
Sinon la seule solution facile est gratuite que j'ai trouvé est ici:
http://www.arfooo.fr/script-arfooo/33-script-arfooo-annuaire-php-7.html
Je l'utilise sur deux annuaire est pour le moment RAS.
Bodyboard
 
Messages: 93
Inscription: Mer 4 Mar 2009 10:14
Localisation: Toulouse

Re: comment rendre compatible Arfooo 2.0.2 avec php 7 et plu

Messagede Keroin » Mer 13 Mar 2019 22:05

Bonjour,
Il n'est pas très compliqué de rendre Arfooo compatible avec PHP 7
Je n'ai pas encore fait le passage en php 7.2 par manque de temps mais le miens tourne actuellement sous du php 7.1.26

Voici ce qu'il faut faire :

Remplacer le fichier \core\Database.php par celui-ci
Code: Tout sélectionner
<?php
/**
* Arfooo
*
* @package    Arfooo
* @copyright  Copyright (c) Arfooo Annuaire (fr) and Arfooo Directory (en)
*             by Guillaume Hocine (c) 2007 - 2010
*             http://www.arfooo.com/ (fr) and http://www.arfooo.net
* @author     Guillaume Hocine & Adrian Galewski
* @license    http://creativecommons.org/licenses/by/2.0/fr/ Creative Commons
*/


/**
* Class to co-operate with MySQL database.
*/
class Database extends Object
{
    private $dbHost;
    private $dbUser;
    private $dbPass;
    private $dbName;

    private $debug = false;
    private $lastInsertId;
    private $lastAffectedRows;
    private $queriesCnt = 0;
    private $queriesTime = 0;
    private static $instance = null;
    private $connected;
   
   private $conn;

    /**
     * Returns an instance of Database object
     * @return Database
     */
    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new self();
        }

        return self::$instance;
    }

    public function setDebug($value)
    {
        $this->debug = $value;
    }

    /**
     * Generates the standard Database object
     */
    public function __construct()
    {
        $this->dbHost = Config::get("DB_HOST");
        $this->dbUser = Config::get("DB_USER");
        $this->dbPass = Config::get("DB_PASS");
        $this->dbName = Config::get("DB_NAME");
    }

    /**
     * Connect to mysql server and selct database to use
     */
    public function connect()
    {
      $this->conn = $conn = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName);

      if(mysqli_connect_errno()){
         trigger_error("<b>Can't connect to MySQL server</b></b>");
      }
      
    }

    /**
     * Creates and executes UPDATE query
     * @return resource MySQL result resource
     */
    public function sqlUpdate($tabname, $vars, $where = "")
    {
        $sql = "UPDATE $tabname SET ";

        foreach ($vars as $key => $value) {
            if ($key{0} != "_") {
                $value = addslashes($value);
                $value = "'" . $value . "'";
            }

            $sql .= ltrim($key, "_") . "=" . $value . ", ";
        }

        $sql = substr($sql, 0, -2);

        if (!empty($where)) {
            $sql .= " WHERE $where";
        }

        $res = $this->sqlQuery($sql);

        return $res;
    }

    private function removeStartUnderscore($field)
    {
        return ltrim($field, "_");
    }

    /**
     * Creates and executes INSERT query
     * @return resource MySQL result resource
     */
    public function sqlInsert($tabname, $varsTab, $multi = false)
    {
        if (!$multi) {
            $varsTab = array($varsTab);
        }

        $sql = "INSERT INTO $tabname(";
        $sql .= implode(", ", array_map(array($this, "removeStartUnderscore"),
                                        array_keys($varsTab[0])));
        $sql .= ") VALUES";

        $rows = array();
        foreach ($varsTab as $vars) {
            $vals = array();
            foreach ($vars as $key => $val) {
                if ($key{0} != "_") {
                    $val = addslashes($val);
                    $val = "'" . $val . "'";
                }
                $vals[] = "$val";
            }

            $rows[] = "(" . implode(",", $vals) . ")";
        }

        $sql .= implode(", ", $rows);
        $res = $this->sqlQuery($sql);

        return $res;
    }

    /**
     * Creates and executes INSERT query - multi inserts in same time
     * @return resource MySQL result resource
     */
    public function sqlMultiInsert($tabname, $varsTab)
    {
        return $this->sqlInsert($tabname, $varsTab, true);
    }

    /**
     * Creates and executes DELETE query
     * @return resource MySQL result resource
     */
    public function sqlDelete($tabname, $where = "")
    {
        $sql = "DELETE FROM $tabname";
        if ($where) {
            $sql .= " WHERE $where";
        }
        $res = $this->sqlQuery($sql);
        return $res;
    }

    /**
     * Creates and execute SELECT query
     * @return resource MySQL result resource
     */
    public function sqlSelect($tabname, $arrWhat = "*", $where = "", $options = "", $joins = "")
    {
        if (is_array($tabname)) {
            $tabname = implode(", ", $tabname);
        }

        if (is_array($arrWhat)) {
            if (count($arrWhat)) {
                $what = implode(", ", $arrWhat);
            } else {
                $what = "*";
            }
        } else {
            $what = $arrWhat;
        }

        $sql = "SELECT $what FROM $tabname ";
        if (is_array($joins) && count($joins) == 2) {
            $sql .= " LEFT JOIN $joins[0] ON $tabname.$joins[1] = $joins[0].$joins[1]";
        }
        if (!empty($where)) {
            $sql .= " WHERE $where";
        }
        if (!empty($options)) {
            $sql .= " $options";
        }

        $res = $this->sqlQuery($sql);
        return $res;
    }

    /**
     * Executes custom query
     * @return resource MySQL result resource
     */
    public function sqlQuery($sql)
    {
        if (!$this->connected) {
            $this->connect();
            $this->connected = true;
            $this->sqlQuery("SET NAMES " . Config::get('DEFAULT_CHARSET'));
        }

        $startTime = microtime(true);
        $res = mysqli_query($this->conn,$sql);
        $endTime = microtime(true);
        $queryTime = $endTime - $startTime;

        if ($this->debug) {
            echo sprintf("%f", $queryTime) . "<br>";
            echo "<b>" . $sql . "</b><br><br>";
        }

        $this->queriesCnt++;
        $this->queriesTime += $queryTime;

        Display::set("queriesCount", $this->queriesCnt);
        Display::set("queriesTime", $this->queriesTime);

        if (!$res) {
            echo $sql;
            $error = mysqli_error();
            $errornr = mysqli_errno();
            trigger_error("B³±d SQL $error ($errornr)");
        }

        $this->lastInsertId = mysqli_insert_id($this->conn);
        $this->lastAffectedRows = mysqli_affected_rows($this->conn);

        return $res;
    }

    /**
     * Get insert id from last query
     * @return int
     */
    public function insertID()
    {
        return $this->lastInsertId;
    }

    /**
     * Get affected rows count in last query
     * @return int
     */
    public function affectedRows()
    {
        return $this->lastAffectedRows;
    }

    /**
     * Get one row from MySQL result resource
     * @param resource MYSQL result resource
     * @return array
     */
    public function sqlFetchArray($res)
    {
        $row = mysqli_fetch_assoc($res);
        return $row;
    }

    /**
     * Get numberer of rows in MySQL result resource
     * @param resource MYSQL result resource
     * @return int
     */
    public function sqlNumRows($res)
    {
        $count = mysqli_num_rows($res);
        return $count;
    }

    /**
     * Get value from database
     * @param string $what field name or complete sql query
     * @param string $tabname table which shoulb be used to get value
     * @param string $where WHERE part of query
     * @param string $opt additional query options
     * @return string|boolean return value or false if not exists
     */
    public function sqlGet($what, $tabname = "", $where = "", $opt = "")
    {
        $sql = $what;
        if ($tabname != "") {
            $sql = "SELECT $what FROM $tabname";
        }
        if ($where != "") {
            $sql .= " WHERE $where";
        }
        if ($opt != "") {
            $sql .= " $opt";
        }

        $res = $this->sqlQuery($sql);
        if (mysqli_num_rows($res) == 0) {
            return false;
        }

        if (mysqli_num_fields($res) > 1) {
            return $this->sqlFetchArray($res);
        } else {
            return $this->mysqli_result($res, 0, 0);
        }
    }
   
   private 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;
   }

    public function sqlGetRow($what, $tabname = "", $where = "", $opt = "")
    {
        $sql = $what;
        if ($tabname != "") {
            $sql = "SELECT $what FROM $tabname";
        }
        if ($where != "") {
            $sql .= " WHERE $where";
        }
        if ($opt != "") {
            $sql .= " $opt";
        }

        $res = $this->sqlQuery($sql);
        if (mysqli_num_rows($res) == 0) {
            return false;
        }

        return $this->sqlFetchArray($res);
    }

    /**
     * Get all rows from database which will return query
     * @param string $what field name or complete sql query
     * @param string $tabname table which shoulb be used to get value
     * @param string $where WHERE part of query
     * @param string $opt additional query options
     * @return array
     */
    public function sqlGetAll($what, $tabname = "", $where = "", $opt = "")
    {
        $sql = $what;
        if ($tabname != "") {
            $sql = "SELECT $what FROM $tabname";
        }
        if ($where != "") {
            $sql .= " WHERE $where";
        }
        if ($opt != "") {
            $sql .= " $opt";
        }

        $out = array();
        $res = $this->sqlQuery($sql);
        while ($row = $this->sqlFetchArray($res)) {
            $out[] = $row;
        }
        return $out;
    }

    /**
     * Get rows count which match to query
     * @param string $tabname table to use
     * @param string $where WHERE part of query
     * @return int
     */
    public function sqlCount($tabname, $where = "")
    {
        $sql = "SELECT count(*) as cnt FROM $tabname";
        if ($where != "") {
            $sql .= " WHERE $where";
        }

        $res = $this->sqlQuery($sql);
        $row = $this->sqlFetchArray($res);
        $cnt = intval($row['cnt']);

        return $cnt;
    }

    /**
     * Get total number of executed queriee
     * @return int
     */
    public function getQueriesCnt()
    {
        return $this->queriesCnt;
    }

    public function getLastInsertId()
    {
        return $this->lastInsertId;
    }

    public function getTotalQueriesCount()
    {
        return $this->queriesCnt;
    }

    public function getTotalQueriesTime()
    {
        return $this->queriesTime;
    }
}


Ensuite il y a 3 fichiers à modifier :
- \components\template_lite\class.compiler.php

Remplacer les lignes 66 et suivantes
Code: Tout sélectionner
    public $_obj_params_regexp     =   null;
   public $_templatelite_vars      =   array();

   function Template_Lite_compiler()
   {
      // matches double quoted strings:
      // "foobar"
      // "foo\"bar"
      // "foobar" . "foo\"bar"
      $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"';


par

Code: Tout sélectionner
public $_obj_params_regexp     =   null;
   public $_templatelite_vars      =   array();
   
   function __construct()
   {
      $this->Template_Lite_Compiler();
   }
   
   function Template_Lite_compiler()
   {
      // matches double quoted strings:
      // "foobar"
      // "foo\"bar"
      // "foobar" . "foo\"bar"
      $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"';


- \components\template_lite\class.config.php

Remplacer les lignes 35 et suivantes
Code: Tout sélectionner
public $_bool_false_regexp      = null;
   public $_qstr_regexp      = null;

   function config()
   {
      $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"';
      $this->_bool_true_regexp = 'true|yes|on';
      $this->_bool_false_regexp = 'false|no|off';


par

Code: Tout sélectionner
public $_bool_false_regexp      = null;
   public $_qstr_regexp      = null;
   
   function __construct() {

   }
   
   function config()
   {
      $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"';
      $this->_bool_true_regexp = 'true|yes|on';
      $this->_bool_false_regexp = 'false|no|off';


- \components\template_lite\class.template.php

Remplacer les lignes 92 et suivantes
Code: Tout sélectionner
public $_resource_time;
   public $_sections = array();
   public $_foreach = array();

   function Template_Lite()
   {
      $this->_version_date = strtotime($this->_version_date);
   }

   function load_filter($type, $name)


par

Code: Tout sélectionner
public $_resource_time;
   public $_sections = array();
   public $_foreach = array();
   
   function __construct() {

   }
   
   function Template_Lite()
   {
      $this->_version_date = strtotime($this->_version_date);
   }

   function load_filter($type, $name)


Il faudra surement vider les dossiers cache et compiled (sauf les Htaccess) mais ça devrait fonctionner au moins pour du PHP 7.1 ;)
Les Pages du Keroinsite - Annuaire généraliste gratuit : http://pages.keroinsite.com
Keroin
 
Messages: 192
Inscription: Mar 15 Juil 2008 15:48

Re: comment rendre compatible Arfooo 2.0.2 avec php 7 et plu

Messagede lechtimi » Sam 4 Mai 2019 11:54

Merci pour le tuto ;)
lechtimi
 
Messages: 105
Inscription: Lun 3 Mar 2008 06:08

Re: comment rendre compatible Arfooo 2.0.2 avec php 7 et plu

Messagede web2 » Dim 19 Mai 2019 19:46

Merci
web2
 
Messages: 22
Inscription: Ven 12 Juin 2009 14:03


Retourner vers Installation, aide et report de bugs

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

 
Copyright © arfooo.com  2007 - 2011  -  Tous droits réservés  -  Partenaires de confiance
Sites du groupe: petites annonces gratuites   voyance en direct - tirage tarot   Consultant en référencement
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group | phpBB SEO Traduction par: phpBB-fr.com
cron