Seite 2 von 2

Verfasst: Di 31. Okt 2006, 13:53
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...

Verfasst: Di 31. Okt 2006, 20:14
von tono
Kann ich nachvollziehen. Ist angepasst.

Verfasst: Mi 1. Nov 2006, 11:42
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);

    }


}

Verfasst: Mi 1. Nov 2006, 12:00
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...

Verfasst: Mi 1. Nov 2006, 13:58
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.

Verfasst: Do 2. Nov 2006, 02:03
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.

Verfasst: Do 2. Nov 2006, 09:51
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...