Contenido intelligent cache Engine

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

kleine korrektur meinerseits

ähm nur

Code: Alles auswählen

$_cachedCode = $code;
verwenden... (ohne die if abfrage...) wäre ne ziemlich böse sicherheitslücke...
*** make your own tools (wishlist :: thx)
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

Kann ich nachvollziehen. Ist angepasst.
Bis dann
Tono
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ich hab mir das mit der preformance angesehen und es so geändert das nur mehr ein update statement gefahren wird...

sieht momentan etwas seltsam aus...

function conGenerateCacheCode

Code: Alles auswählen

      $output = '<?php $_cachedCode = $code ?>'.$output;
ersetzen durch

Code: Alles auswählen

        $output = '<'.'?php $_cachedCode = Array(); $_cachedCode["update"] = false; $_cachedCode["code"] = $code; ?'.'>'."\n".$output;
        $output.= '<'.'?php if ($_cachedCode["update"] == true) conUpdateCacheCode('."$idcatart,$lang,$client,0,'',true".'); ?'.'>'."\n";

Code: Alles auswählen

         //Standardfall 
         $part = ereg_replace('=([[:digit:]]+)[[:space:]](.*)cache!>', 
         '<!?php if ((time() > '.time().'+\\1) and (!$edit)):'."\n". 
         'ob_start();'."\n". 
         '\\2'."\n". 
         '$cached_code=ob_get_flush();'."\n". 
         'conUpdateCacheCode('."$idcatart,$lang,$client,$cacheid".',$cached_code);'."\n". 
         'else:?!>'."\n". 
         '<!--cached code id '."$cacheid -->\n". 
         '<?php'."\n". 
         '\\2'."\n". 
         '?>'."\n". 
         '<!--cached code id '."$cacheid -->\n". 
         '<!?endif;?!>',$part);
ersetzen durch

Code: Alles auswählen

            $tag = "<!-- cached code id $cacheid -->"; // the cache block delimiter

            //Standardfall
            $part = ereg_replace('=([[:digit:]]+)[[:space:]](.*)cache!>',
            '<!?php if ((time() > '.time().'+\\1) and (!$edit)):'."\n".
            'ob_start();'."\n".
            '\\2'."\n".
            '$_cachedCode["update"] = true;'."\n".
            'conUpdateCacheCode('."$idcatart,$lang,$client,$cacheid".',ob_get_flush());'."\n".
            'else:?!>'."\n".
            $tag."\n".
            '<?php'."\n".
            '\\2'."\n".
            '?>'."\n".
            $tag."\n".
            '<!?endif;?!>',$part);
und die andere funktion als ganzes

Code: Alles auswählen

function conUpdateCacheCode($idcatart,$lang,$client,$cacheid,$newCodeBlock, $update = false)
{
    global $_cachedCode;

    if (!$update) {
        $tag = "<!-- cached code id $cacheid -->"; // the cache block delimiter
        $codearr = explode($tag, $_cachedCode['code']); // explode the old code and ...
        $_cachedCode['code'] = $codearr[0].$tag.$newCodeBlock.$tag.$codearr[2]; //...glue together the new one
        $_cachedCode['code'] = preg_replace("/if \(\(time\(\) > \d*\+(\d*)\)/","if ((time() > ".time()."+$1)", $_cachedCode['code']); // fit it into the code for expiration checking

    } else {
        echo "<!-- CACHED PARTS UPDATED //-->";
        global $cfg;
        $db = new DB_Contenido();
        $sql = "UPDATE ".$cfg["tab"]["code"]." SET `code`='".addslashes(addslashes($_cachedCode['code']))."' WHERE `idcatart` = ".$idcatart." AND `idlang` = ".$lang." AND `idclient` = ".$client.";";// do not forget to addslash twice.
        $db->query($sql);

    }


}
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm mir ist gerade noch was aufgefallen

Code: Alles auswählen

preg_replace("/if \(\(time\(\) > \d*\+(\d*)\)/","if ((time() > ".time()."+$1)", $_cachedCode['code']); // fit it into the code for expiration checking
führt dazu das alle zeit prüfungen ersetzt werden
ersetzt werden müsste nur die aktuell upgedatete...
*** make your own tools (wishlist :: thx)
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

Das ist richtig. Seh ich mir nochmal an.

Ich bastel gerade dran, dass auch <?php ?> Tags im Cache-Block funktionieren.

Ich bastel dann alles zusammen in die ersten Posts, wenn ich soweit bin.
Bis dann
Tono
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

So, deine Änderungen sind drin.

Von meiner Seite neu:
<?php ?>-Tags in cache-Blöcken möglich.
preg für Zeitupdate gefixt.
Alte Syntax <!cache (ohne Wert) wird zuzeit nicht mehr unterstützt. Braucht man das?

Neues Problem gefunden:
Zwischen <!cache=x und dem nächsten <container /> muss ein HTML-Tag stehen, sonst geht der Container nicht.
Bis dann
Tono
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm, mir ist gerade was aufgefallen, was sich auch nicht ohne weiteres ändern läßt...

die platzhalter in schleifen funktionieren nur dann einwandfrei
wenn <!cache=-1 verwendet wird...

sobald ein block upgedatet wird geht das nicht mehr... (die ersetzung der platzhalter findet nur bei der generierung des con_code eintrags statt (also einmalig))
preg für Zeitupdate gefixt.
die änderung find, oder versteh ich nicht...
Zwischen <!cache=x und dem nächsten <container /> muss ein HTML-Tag stehen, sonst geht der Container nicht.
check ich momentan auch nicht...

so, muss mich jetzt aber wieder um was anderes kümmern... hoffe ich konnte dich doch etwas bei deinen bemühungen unterstützen...
*** make your own tools (wishlist :: thx)
Antworten