Idées et rapports de bugs pour la version 2.0.3

Annonces des nouveautés, des mises à jour de Arfooo Annuaire et des scripts de migration

Re: Idées et rapports de bugs pour la version 2.0.3

Messagede Jusseo » Jeu 7 Nov 2013 19:27

regarde juste deux messages avant ma demande ;)
Avatar de l’utilisateur
Jusseo
 
Messages: 19
Inscription: Ven 5 Nov 2010 16:38


Re: Idées et rapports de bugs pour la version 2.0.3

Messagede Jusseo » Mar 7 Jan 2014 13:25

je up ce tropic toujours personne?
Avatar de l’utilisateur
Jusseo
 
Messages: 19
Inscription: Ven 5 Nov 2010 16:38

Re: Idées et rapports de bugs pour la version 2.0.3

Messagede equitable » Mer 26 Mar 2014 22:32

bonjour ilya aussi le problème thumb et des miniature des sites qui ne marche pas
merci
equitable
 
Messages: 7
Inscription: Lun 15 Fév 2010 19:38

Re: Idées et rapports de bugs pour la version 2.0.3

Messagede enligne » Mer 29 Avr 2020 17:54

Bonjour tous et re bienvenu a Arf !

Il n'est pas complètement compatible avec php 7.4, meme la 7.0.33 sur la fonction sauvegarder

Sauvegarder dans l'admin (/admin/system/save)
Dans le fichier DatabaseModel.php, nous avons la fonction : mysql_real_escape_string

Cette fonction est incompatible à partir de php 7.0 (https://www.php.net/manual/fr/function. ... string.php)

J'ai essayé sans succès, si quelqu'un a réussi, cela devrait faire quelques heureux
Avatar de l’utilisateur
enligne
 
Messages: 181
Inscription: Lun 3 Jan 2011 17:24

Re: Idées et rapports de bugs pour la version 2.0.3

Messagede Arf » Mer 29 Avr 2020 18:49

Salut,

J'ai pas testé cette function.
J'en ai testé une grande partie, mais pas celle là ^^
Je sauvegarde jamais via arfooo. L'hébergeur s'en charge directement.

Sans avoir testé, tu as juste à remplacer
Code: Tout sélectionner
mysql_real_escape_string


par :

Code: Tout sélectionner
mysqli_real_escape_string
Arf
Administrateur du site
 
Messages: 3096
Inscription: Lun 21 Jan 2008 14:53

Re: Idées et rapports de bugs pour la version 2.0.3

Messagede enligne » Mer 29 Avr 2020 19:09

Arf a écrit:Sans avoir testé, tu as juste à remplacer
Code: Tout sélectionner
mysql_real_escape_string

par :
Code: Tout sélectionner
mysqli_real_escape_string


Je confirme, tu n'as pas testé :/
Avatar de l’utilisateur
enligne
 
Messages: 181
Inscription: Lun 3 Jan 2011 17:24

Re: Idées et rapports de bugs pour la version 2.0.3

Messagede Arf » Jeu 30 Avr 2020 00:38

mdr :D

Ok et toi tu as testé les dump avec Arfooo ?
Essai de dump à partir d'une sauvegarde et dis moi si tu arrives à monter ta sauvegarde sans erreur.

Ou sinon file moi une sauvegarde.
C'est une function qui est inutile à partir du moment où tu as une hébergeur compétent.

Remplacer le fichier core/Database.php par :
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.fr/ (php7)
* @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 coreObject
{
    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>");
        }

        return $conn;
       
    }

    /**
     * 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;
    }
}


Remplacer le fichier models/DatabaseModel.php
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/ (en)
* @author     Guillaume Hocine & Adrian Galewski
* @license    http://creativecommons.org/licenses/by/2.0/fr/ Creative Commons
*/


class DatabaseModel extends Model
{
    function getTotalSize()
    {
        $totalSize = 0;

        foreach ($this->db->sqlGetAll("SHOW TABLE STATUS") as $row) {
            $totalSize += $row['Data_length'] + $row['Index_length'];
        }

        $unit = "B";

        if ($totalSize >= 1024) {
            $totalSize /= 1024;
            $unit = "KiB";
        }

        if ($totalSize >= 1024) {
            $totalSize /= 1024;
            $unit = "MiB";
        }

        return round($totalSize, 1) . " " . $unit;
    }

    function optimize()
    {
        foreach ($this->db->sqlGetAll("SHOW TABLES") as $row) {
            $table = current($row);
            $row = $this->db->sqlGet("OPTIMIZE TABLE $table");
        }
    }

    function createBackup($outputMethod = "txt", $action = "download")
    {
        $date = date("Y-m-d H-i-s");
        $backupSqlCode = "# Database backup $date";

        foreach ($this->db->sqlGetAll("SHOW TABLES") as $row) {
            $table = current($row);

            $backupSqlCode .= "\n\n# -- $table structure ---\n\n";
            $backupSqlCode .= "DROP TABLE IF EXISTS $table;\n";
            $createRow = $this->db->sqlGet("SHOW CREATE TABLE $table");
            $createTableSql = $createRow['Create Table'];

            $backupSqlCode .= $createTableSql . ";\n\n";

            $res = $this->db->sqlQuery("SELECT * FROM $table");
            $linesCount = $this->db->sqlNumRows($res);
            $conn = $this->db->connect();

            if ($linesCount) {
                $backupSqlCode .= "INSERT INTO $table VALUES";

                while ($dataRow = $this->db->sqlFetchArray($res)) {
                    $linesCount--;
                    $dataRow = array_map(array($conn, 'real_escape_string'), $dataRow);
                    $dataLine = "('" . implode("', '", $dataRow) . "')";
                    if ($linesCount) {
                        $dataLine .= ",";
                    }
                    $backupSqlCode .= $dataLine;
                }

                $backupSqlCode .= ";";
            }
        }

        $fileName = "backup-" . $date . "." . $outputMethod;

        if ($outputMethod == "gz") {
            $backupSqlCode = gzencode($backupSqlCode);
        }

        if (strpos($action, "store") !== false) {
            $fp = fopen(CODE_ROOT_DIR . "save/" . $fileName, "w");
            fwrite($fp, $backupSqlCode);
            fclose($fp);
        }

        if (strpos($action, "download") !== false) {
            header("Content-type: application/octet-stream");
            header("Content-Disposition: attachment; filename=\"$fileName\"");
            header("Content-length: " . strlen($backupSqlCode));
            echo $backupSqlCode;
        }
    }

    function sqlQuery($sql)
    {
        $this->db->sqlQuery($sql);
    }
}
Arf
Administrateur du site
 
Messages: 3096
Inscription: Lun 21 Jan 2008 14:53

Re: Idées et rapports de bugs pour la version 2.0.3

Messagede enligne » Jeu 30 Avr 2020 03:19

Super et MERCI pour ta rapidité à traiter ce problème, cela fonctionne très bien :D
(il me manquait la variable $conn) !

Pour le Dump, j'ai eu de temps en temps besoin de récupérer juste quelques informations à un instant T,
Suite à une purge un peu trop large après avoir vérifié les liens en retour inexistant, les sites en erreur ou une suppression de fiche par erreur.

Je suis d'accord avec toi, le backup de l'hébergeur ou le script sur un dédié effectue déjà le travail.
L'avantage de la sauvegarde intégré, permet de faire celle-ci quand on veut, juste avant son traitement par ex.

PS : Pourquoi ne pas mettre Arfooo sur Github par exemple ?

Encore merci à toi pour la résolution de ce problème de sauvegarde :roll:
Avatar de l’utilisateur
enligne
 
Messages: 181
Inscription: Lun 3 Jan 2011 17:24

Précédente

Retourner vers Annonces concernant le script Arfooo Annuaire

 


  • 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