Seite 1 von 1

Cache Pear

Verfasst: Sa 1. Mär 2003, 12:53
von ekke
Hallo, jetzt kann die Seite gecached werden. Ihr brauch pear Cache und einen Ordner cache mit entsprechenden Rechten. Ersetzt Euer front_content.php (backuppen) mit

Code: Alles auswählen

<?
ob_start();
include("config.php");
include($ContenidoPath."inc/config.php");
include($ContenidoPath.$cfgPathInc."cfg_sql.inc.php");
include($ContenidoPath.$cfgPathInc."cfg_language_".$language.".inc.php");
include($ContenidoPath.$cfgPathInc."fnc_general.inc.php");
require_once ("Cache/Output.php");
//Ein neues Cacheobjekt instantiieren.
//Optionen wie üblich
$outputcache=new Cache_Output("file",array("cache_dir"=>"cache/"));
//Eine eindeutige ID für diese Seite generieren.
//Wenn unsere Seite von Post-Variablen oder Cookies abhängig ist einfach hier mit angeben
//generateID() nimmt beliebige Variablen, also ginge ein Array hier auch.

$id=$outputcache->generateID(array("file" => $PHP_SELF,
                "get" => $HTTP_GET_VARS,
                "post" => $HTTP_POST_VARS,
                "cookie" => $HTP_COOKIE_VARS));
//Seiteninhalt aus dem Cache holen oder Outputcache starten
if($output=$outputcache->start($id)){
//Die Seite ist schon im Cache.
//$content ausgeben und Script beenden.
echo $output;
die();
}
page_open(
    array("sess" => "Contenido_Frontend_Session",
          "auth" => "Contenido_Frontend_Challenge_Crypt_Auth",
          "perm" => "Contenido_Perm"));
error_reporting (E_ALL-E_NOTICE);

$db = new DB_Contenido;

if (!$client) die ("Es wurde kein client angegeben.");

if (!$lang) {$sql = "SELECT A.idlang FROM $cfgTab_clients_lang AS A, $cfgTab_lang AS B WHERE idclient='$client' AND A.idlang=B.idlang AND B.active='1' LIMIT 0,1";
	    $db->query($sql);
	    if ($db->next_record()) {$lang = $db->f("idlang");}
             else die ("Es ist keine Sprache vorhanden oder aktiv.");}
// --------------------------------------------------------------------- //
// Gruppen einlesen //

$sql = "SELECT A.idcat, A.parentid, A.preid, A.postid, B.name, B.public, C.level FROM $cfgTab_cat AS A, $cfgTab_cat_lang AS B, $cfgTab_cat_tree AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND A.idclient='$client' AND B.idlang='$lang' AND B.visible='1'";
$db->query($sql);
while($db->next_record()){
	$con_tree[$db->f("idcat")][parent]	= $db->f("parentid");
	$con_tree[$db->f("idcat")][preid]	= $db->f("preid");
	$con_tree[$db->f("idcat")][postid]	= $db->f("postid");
	$con_tree[$db->f("idcat")][titel]	= $db->f("name");
	$con_tree[$db->f("idcat")][public]	= $db->f("public");
	$con_tree[$db->f("idcat")][level]	= $db->f("level");
	$con_tree[$db->f("idcat")][link]	= $sess->url("front_content.php?client=".$client."&lang=".$lang."&parent=".$db->f("parentid")."&idcat=".$db->f("idcat")."");
	if($db->f("idcat") > $con_tree_max){$con_tree_max = $db->f("idcat");}
};
// Seiten einlesen //
$sql = "SELECT A.idcat, A.idside, A.is_start, B.title, B.summary, C.public FROM $cfgTab_cat_side AS A, $cfgTab_side_lang AS B, $cfgTab_cat_lang AS C, $cfgTab_cat AS D WHERE A.idside=B.idside AND A.idcat=C.idcat AND C.idcat=D.idcat AND B.online='1' AND C.visible='1' AND D.idclient='$client'";
$db->query($sql);
while($db->next_record()){
	$con_side[$db->f("idcat")][$db->f("idside")][idcat]		= $db->f("idcat");
	$con_side[$db->f("idcat")][$db->f("idside")][idside]	= $db->f("idside");
	$con_side[$db->f("idcat")][$db->f("idside")][is_start]	= $db->f("is_start");
	$con_side[$db->f("idcat")][$db->f("idside")][titel]		= $db->f("title");
	$con_side[$db->f("idcat")][$db->f("idside")][summary]	= $db->f("summary");
	$con_side[$db->f("idcat")][$db->f("idside")][public]	= $db->f("public");
	$con_side[$db->f("idcat")][$db->f("idside")][link]		= $sess->url("front_content.php?client=".$client."&lang=".$lang."&idcat=".$db->f("idcat")."&idside=".$db->f("idside")."");
};
// --------------------------------------------------------------------- //


if (!$idcatside) {
	if (!$idside) {
		if (!$idcat) {
			$sql = "SELECT idside, B.idcat FROM $cfgTab_cat_side AS A, $cfgTab_cat_tree AS B, $cfgTab_cat AS C WHERE A.idcat=B.idcat AND B.idcat=C.idcat AND is_start='1' AND idclient='$client' ORDER BY idtree";
			$db->query($sql);
			if ($db->next_record()) {
				$idside = $db->f("idside");
				$idcat = $db->f("idcat");
			} else {
				die ("Keine Startseite in dieser Kategorie vorhanden.");
			}
		} else {
			$sql = "SELECT idside FROM $cfgTab_cat_side WHERE idcat='$idcat' AND is_start='1'";
			$db->query($sql);
			if ($db->next_record()) {
				$idside = $db->f("idside");
			} else {
				die ("Keine Startseite in dieser Kategorie vorhanden.");
			}

		}
	}
} else {
		$sql = "SELECT idcat, idside FROM $cfgTab_cat_side WHERE idcatside='$idcatside'";
		$db->query($sql);
		$db->next_record();
		$idcat = $db->f("idcat");
		$idside = $db->f("idside");


}
		$sql = "SELECT * FROM $cfgTab_code AS A, $cfgTab_cat_side AS B WHERE A.idcatside=B.idcatside AND B.idcat='$idcat' AND B.idside='$idside' AND A.idlang='$lang'";
		$db->query($sql);
		if ($db->next_record()) {
			$code = $db->f("code");
		} else {
			$code = "echo \"No code available.\";";
		}

		$idcatside = $db->f("idcatside");

		//************ check for public ****************
		$sql = "SELECT public FROM $cfgTab_cat_lang WHERE idcat='$idcat' AND idlang='$lang' ";
		$db->query($sql);
		$db->next_record();
		$public = $db->f("public");

		if ($public == 0) {
//			echo "Diese Kategorie ist <b>geschützt</b> .....";
			$auth->login_if($auth->auth["uid"] == "nobody");
		} else {
//			echo "Diese Kategorie ist <b>öffentlich</b>";
		}

		//************ update 'stat'-table ****************
		$sql = "SELECT visited FROM $cfgTab_stat WHERE idcatside='$idcatside' AND idlang='$lang' ";
		$db->query($sql);
		$db->next_record();
		$new_visited = $db->f("visited") + 1;

		$sql = "UPDATE $cfgTab_stat SET visited='$new_visited' WHERE idcatside='$idcatside' AND idlang='$lang' ";
		$db->query($sql);

		$sql = "SELECT online, redirect, redirect_url FROM $cfgTab_side_lang WHERE idside='$idside' AND idlang=$lang";
		$db->query($sql);
		$db->next_record();
		$online = $db->f("online");
		$redirect = $db->f("redirect");
		$redirect_url = $db->f("redirect_url");

		if ($online) {
			//Redirect, if User had chose this opinion in the sideproperties
			if($redirect == '1' && $redirect_url != ''){
				header ("Location: $redirect_url");
				exit;
			}
			else{
            	eval($code);
            }
		} else {
			echo "Seite ist nicht online.";
		}

page_close();
//$output = ob_get_contents();
//Die Cache-Klasse laden. Die Basisklasse wird automatisch hinzugeladen
$outputcache->endPrint();
$output = ob_get_contents();
ob_end_clean();
echo $output;

?>


Macht einen benchmarktest und seht selbst.
Viel Spass

Gruss ekke

PS, nach Anregung von idea-tec editiert:
Übersicht und dann Download Latest klicken.
http://pear.php.net/package-info.php?pacid=40

Verfasst: Sa 1. Mär 2003, 15:22
von idea-tec
du solltest die output.php auch posten oder zum dl anbieten

Verfasst: Di 4. Mär 2003, 16:18
von Sausi
Hi,

habe den Cache nun in das jeweilige Client-Verzeichnis installiert (aufe einem lokalen Webserver, Foxserv mit PHP4, Apache und Mysql. Leider läuft das Programm nicht. Daher meine Fragen:
1) Kann ich den Pear-Cache tatsächlich auch ohne Root-Rechte installieren, also ohne Änderungen an der Konfiguration des Servers vornehmen zu müssen?
2) Wenn ja, welche Änderungen am Code muß ich vornehmen, wenn ich folgende Fehlermeldung erhalte, nachdem ich die front_content.php starte:
Fatal error: Failed opening required 'Cache.php' (include_path='') in c:\programme\foxserv\www\contenido\extra\Cache\Output.php on line 21.

An dieser Stelle wird im übrigen die Cache.php per require_once eingebunden:

Code: Alles auswählen

require_once 'Cache.php';
Wer schön, wenn jemand eine Antwort parat hätte.

Gruß Sausi

Verfasst: Mi 5. Mär 2003, 13:12
von ekke
entweder in das pear-verzeichnis hineinlegen, oder eines im webspace, dann die Pfade anpassen. Vielleicht brauchst Du noch mehr Pakete, je nach Abhängigkeiten.

Gruss ekke

Verfasst: Mi 5. Mär 2003, 19:06
von Sausi
ekke hat geschrieben:entweder in das pear-verzeichnis hineinlegen, oder eines im webspace, dann die Pfade anpassen. Vielleicht brauchst Du noch mehr Pakete, je nach Abhängigkeiten.

Gruss ekke
Hi Ekke,

hab mich falsch ausgedrückt. Ich benutze die lokale Installation eigentlich nur, um Dinge schon mal lokal zu testen. Im "Produktionseinsatz" habe ich allerdings nur einen Schlund-Webspace.
Pear ist ja in der Regel auch Teil der PHP-Installation, deswegen würde ich wissen wollen, ob ich die von Dir programmierte Contenido-Erweiterung auch ohne Änderungen an der Konfiguration des Webservers nutzen kann, denn Root-Rechte habe ich ja nicht.
Meine Pfadstruktur sieht lokal folgendermaßen aus:
Ich habe für die Pear-Cache-Dateien einen Ordner "Cache" im gleichen Verzeichnis kreiert, indem auch die front-content.php liegt. Daneben habe ich noch einen zweiten Ordner namens cache2 kreiert, in welchem dann die temporären Cache-Dateien liegen.
Dennoch gibt es die bereits geschilderteten Fehlermeldungen.
Liegt das an meinen Pfaden?
Muß ich eventuell den Pear-Cache-Ordner an einer ganz anderen Stelle einhängen?

Gruß Sausi