Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Globale Variablen - Abfrage vor der Definition

    Cenk21

    • Neu im Forum
    • Beiträge: 2
    Globale Variablen - Abfrage vor der Definition
    am: 30. November 2009, 18:25:08
    Hallo zusammen,

    wenn man die PHP Errors sich alle anzeigen lässt und die Infos nicht ausblendet sieht man, dass viele globale Variablen wie DB_CACHE vor Ihrer definition innerhalb PHP abgefragt werden.

    Bsp.: shop -> admin/start.php

    Die Variable DB_CACHE steht in der DB, ist aber zur Zeit als xtc_db_fetch_array.inc.php includiert und ausgeführt wird, noch garnicht aus der DB ausgelesen und so führt es bei allen XTC Versionen zu einem unnötigen overhead.

    Dies ist einfach zu unterbinden. In xtc_db_fetch_array.inc.php die funktion

    Code: PHP  [Auswählen]
    function xtc_db_fetch_array(&$db_query,$cq=false) {

            if (DB_CACHE=='true' && $cq) {
                    // BOF - Tomcraft - 2009-08-18 - fixed bug with switched on DB-CACHE in relation with multi-language metatags.php
                    //if (!count($db_query)) return false;
                    if (!is_array($db_query) || !count($db_query)) return false;
                    // BOF - Tomcraft - 2009-08-18 - fixed bug with switched on DB-CACHE in relation with multi-language metatags.php
                    $curr = current($db_query);
                    next($db_query);
                    return $curr;
            } else {
                    if (is_array($db_query)) {
                            $curr = current($db_query);
                            next($db_query);
                            return $curr;
                    }
                    return mysql_fetch_array($db_query, MYSQL_ASSOC);
            }
    }
     
    ändert in:

    Code: PHP  [Auswählen]
    function xtc_db_fetch_array(&$db_query,$cq=false) {

            if (DB_CACHE=='true' && $cq) {
                    if (defined('DB_CACHE'))
                    {
                            // BOF - Tomcraft - 2009-08-18 - fixed bug with switched on DB-CACHE in relation with multi-language metatags.php
                            //if (!count($db_query)) return false;
                            if (!is_array($db_query) || !count($db_query)) return false;
                            // BOF - Tomcraft - 2009-08-18 - fixed bug with switched on DB-CACHE in relation with multi-language metatags.php
                            $curr = current($db_query);
                            next($db_query);
                            return $curr;
                    } else {
                            if (is_array($db_query)) {
                                    $curr = current($db_query);
                                    next($db_query);
                                    return $curr;
                            }
                            return mysql_fetch_array($db_query, MYSQL_ASSOC);
                    }
            }
    }
     
    Einfügen und schon spart man sich diesen Overhead und das System arbeitet schneller.

    Allein die Variable DB_CACHE verursacht bei einem Aufruf über die Dateien

    - includes/application_top.php
    - inc/xtc_db_num_rows.inc.php
    - inc/xtc_db_fetch_array.inc.php
    - inc/xtc_db_data_seek.inc.php

    schon mehr als 200 solcher Informationsmeldungen.

    Dann gibt es da noch die globalen Variablen, die zu genau dem Gleichen ergebnis beitragen!

    IMAGE_MANIPULATOR
    SESSION_FORCE_COOKIE_USE
    ...

    Ich versuche mal weitere zu finden.

    Für den Anfang würde ich empfehlen

    - inc/xtc_db_num_rows.inc.php
    - inc/xtc_db_fetch_array.inc.php
    - inc/xtc_db_data_seek.inc.php
    - application_top zeile 275 --> if (defined('IMAGE_MANIPULATOR')) define('FILENAME_IMAGEMANIPULATOR',IMAGE_MANIPULATOR);

    zu bearbeiten. Die weiteren finde ich noch raus.

    Was haltet ihr davon? Dauert die Abfrage die ich eingebaut habe, eventuell länger als die Fehlermeldungsausgabe bei PHP?

    Gruß Euer

    Cenk



    Linkback: https://www.modified-shop.org/forum/index.php?topic=2854.0
    rechtstexte für onlineshop

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.367
    • Geschlecht:
    Globale Variablen - Abfrage vor der Definition
    Antwort #1 am: 01. Dezember 2009, 12:03:51
    Ich hab deinen Beitrag mal editiert, denn das html markup, was du innerhalb des Code-Blockes benutzen wolltest um die Stellen fett zu markieren, wird logischerweise nicht encodet. ;-)

    Außerdem habe ich den Block auf Grundlage des Trunk angepasst.

    Zur Diskussion freigegeben. ;-)

    Grüße

    Torsten

    Shop Hosting
    10 Antworten
    4175 Aufrufe
    07. Juli 2010, 17:03:19 von Activisioni
    3 Antworten
    5003 Aufrufe
    27. Mai 2011, 10:31:48 von Tomcraft
    8 Antworten
    10725 Aufrufe
    17. Mai 2011, 11:15:11 von Magnifico
               
    anything