Post Cache Mod

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt um einen neuen Mod zu entwicklen, geht's in phpBB 2.0: Mods in Entwicklung weiter.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
AmigaLink
Mitglied
Beiträge: 1417
Registriert: 09.06.2003 21:56
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Na dann mal viel Erfolg mit dem Cache. :)
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Danke.

Ich habe mal verglichen.

Beim CH werden die Userdaten nicht in der gleichen Abfage ausgelesen, wie es beim originalen phpBB der Fall ist.

Tatsächlich sind es nur die Spalten:

Ändern sich nie:
- post_id
- poster_id
- post_time
- poster_ip
- post_username

ändert sich bei aufruf der modcp und daher muss der cache in modcp.php erneuert werden:
- topic_id
- forum_id

bei edit, daher cache erneuerung:
- enable_bbcode
- enable_html
- enable_smilies
- enable_sig
- post_edit_time
- post_edit_count
- post_icon
- post_attachment
- post_subject
- post_sub_title
- post_text
- bbcode_uid

noch ungeprüft:
- post_unread

post_unread könnte ein Problem werden, da muss ich noch mal schauen. Das Feld wird gar nicht aus der Datenbank gelesen sondern dynamisch erstellt. Aber nur um das Icon zu wechseln. Mal sehen was ich da drehe.

Hier mal eine cache-Datei, vielleicht kannst Du was damit anfangen: (Zeilenumbrüche eingebaut)

Code: Alles auswählen

<?php
//---------------------------------------------
// Generated : 2007-02-28 19:18:53 (GMT)
//---------------------------------------------
if ( !defined('IN_PHPBB') )
{
	die('Hack attempt');
}
$row = unserialize('a:1:{i:247;a:20:
s:7:"post_id";s:3:"247";s:8:"topic_id";s:2:"82";s:8:"forum_id";s:1:"1";s:
9:"poster_id";i:2;s:9:"post_time";s:10:"1139961971";s:9:"poster_ip";s:8:"
543f0e59";s:13:"post_username";s:0:"";s:13:"enable_bbcode";s:1:"1";s:1
1:"enable_html";s:1:"0";s:14:"enable_smilies";s:1:"1";s:10:"enable_sig";s
:1:"0";s:14:"post_edit_time";s:1:"0";s:15:"post_edit_count";s:1:"0";s:9:"p
ost_icon";s:1:"0";s:15:"post_attachment";s:1:"0";s:12:"post_subject";s:4:
"test";s:14:"post_sub_title";s:0:"";s:9:"post_text";s:4:"test";s:10:"bbcode
_uid";s:10:"01bcbcde00";s:11:"post_unread";b:0;}}');
$user_ids = unserialize('a:1:{i:2;b:1;}');

?>
Ein Script für das Löschen des gesamten Caches habe ich auch geschrieben, falls es dir hilft:

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//

if ( $userdata['user_level'] != ADMIN )
{
	message_die(GENERAL_MESSAGE, $lang['Not_admin']);
}

$delete_per_loop = 1000;

$last_id = ( isset($HTTP_GET_VARS['last_id']) ) ? $HTTP_GET_VARS['last_id'] : '';
$count_files = count(glob($phpbb_root_path . 'cache/topics/*.php'));
$i = 0;

foreach ( glob($phpbb_root_path . 'cache/topics/*.php') as $fn )
{
	if ( $i == $delete_per_loop )
	{
		break;
	}
	unlink($fn);
	$i++;
}

if ( $count_files == 0 )
{
	exit('Done...');
}
else
{
	echo("\n\n<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"" . $phpbb_root_path . "delete_cache.php\";',4000);</script>\n");
	echo("<p><a href=\"" . $phpbb_root_path . "delete_cache.php\">Manuell weiter...</p>\n");
}

?>
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Hallo Amigalink,

inspiriert von ptirhiik habe ich nun die Verzeichnisstruktur nach einer Diskussion mit Jensemann verschachtelt nach den ersten zwei Stellen unterteilt:
[ externes Bild ]

Die delete_cache.php habe ich entsprechend angepasst. Bei Bedarf kann man auch die Ordner löschen lassen. Aber das habe ich standardmäßig deaktiviert, damit die Ordner nicht extra neu erstellt werden müssen:

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//

if ( $userdata['user_level'] != ADMIN )
{
	message_die(GENERAL_MESSAGE, $lang['Not_admin']);
}

// Settings
$delete_per_loop = 1000;
$dir = 'cache/topics/';
$delete_folders = false;

// Delete cache
$i = 0;
function delete_cache($dir, &$i, $force=false)
{
	global $delete_per_loop, $delete_folders;
	if ( is_dir($dir) )
	{
		if ( substr($dir, -1) != '/' )
		{
			$dir .= '/';
		}
		$handle = opendir($dir);
		while ( ($fn = readdir($handle)) !== false )
		{
			if ( $i == $delete_per_loop )
			{
				return false;
			}
			if ( $fn != '.' && $fn != '..' )
			{
				$path = $dir . $fn;
				if ( is_dir($path) )
				{
					delete_cache($path, $i, true);
				}
				else
				{
					unlink($path);
				}
			}
			$i++;
		}
		closedir($handle);
		if ( $delete_folders && $force )
		{
			rmdir($dir);
		}
		return true;
	}
	else
	{
		return false;
	}
}

if ( delete_cache($dir, $i) )
{
	exit('Done...');
}
else
{
	echo("\n\n<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"" . $phpbb_root_path . "delete_cache.php\";',4000);</script>\n");
	echo("<p><a href=\"" . $phpbb_root_path . "delete_cache.php\">Manuell weiter...</p>\n");
}

?>
Die Unterordner erkenne ich wie folgt:

Code: Alles auswählen

	function topic_cached()
	{
		global $config;
		$this->cache_folder = (string)$this->topic_id;
		$this->cache_folder = intval($this->cache_folder{0}) . '/' . intval($this->cache_folder{1}) . '/';
		if ( @file_exists($config->url('cache/topics/' . $this->cache_folder . intval($this->topic_id) . '_' . intval($this->parms['start']))) )
		{
			$this->cached = true;
			return true;
		}
		else
		{
			$this->cached = false;
			return false;
		}
	}
Die Ordner erstelle ich wie folgt:

Code: Alles auswählen

		// output to file
		if ( !file_exists('cache/topics/' . $this->cache_folder) )
		{
			@mkdir('cache/topics/' . intval($this->cache_folder{0}), 0777);
			@chmod('cache/topics/' . intval($this->cache_folder{0}), 0777);
			@mkdir('cache/topics/' . intval($this->cache_folder{0}) . '/' . intval($this->cache_folder{2}), 0777);
			@chmod('cache/topics/' . intval($this->cache_folder{0}) . '/' . intval($this->cache_folder{2}), 0777);
		}
chmod() ist notwendig für User, deren mkdir aus Sicherheitsgründen z.B. wie bei hosteurope keine Parameter erkennt. (wird dort standardmäßig 755).

Derzeit cache ich komplette Topics, deren Seiten voll mit Posts sind oder wenn nicht, wenn sie älter als 14 Tage alt sind, damit der Cache nicht immer wieder neu geschrieben werden muss.

Mit dem Ergebnis bin ich erstmal zufrieden. Ich werden den Download erstmal erneuern und dann ein paar Tage abwarten und sehen, ob ich bei der Performance eine Verbesserung erkennen kann.

ptirhiik wieß mich übrigens noch daraufhin, dass wir die bbcode.tpl unterschiedlicher Styles ignorieren. D.h. wir nehmen gerade die, von dem der Cache erstellt wird. Jedenfalls ist das bei mir so. Aber ich denke Du hast da auch keine andere Lösung, weil ja sonst für jedes Style eine eigene Cachedatei erstellt werden müsste.

Gruß
Marc
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
AmigaLink
Mitglied
Beiträge: 1417
Registriert: 09.06.2003 21:56
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Nicht uninteressant was du da machst. Vorallem das mit der Verzeichnisstruktur gefällt mir ganz gut.

Was die eventuell vorhandenen bbcode.tpl anbetrifft. Der Admin kann, bei meinem CPS, bestimmen ob für jeden Style eine eigene Cachedatei angelegt werden soll oder nicht. :)
Das schließt eventuelle Stylefehler aus (wenn mehrere Templates genutzt werden). Vervielfacht aber natürlich auch den Speicherbedarf.
Muss halt jeder Admin dann selbst entscheiden ob das nötig ist oder nicht. Ich z.B. verwende auf www.EssenMitFreude.info 3 Styles. Lasse aber nur 1 Cachefile anlegen. Das funktioniert Fehlerfrei, weil die bbcode.tpl's identisch sind und die Styleunterschiede in erster Linie durch die CSS-Datei bestimmt werden. :)
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Habe ich genauso und ich glaube es gibt kaum jemanden, der die bbcode.tpl überhaupt unterschiedlich hat.

Aber extra für jedes Style eine Option einrichten mache ich erst gar nicht. Ich werde einfach in die Anleitung reinschreiben, dass die bbcode.tpl überall gleich sein muss und feddig. Frisst ja sonst nur unnötig Codezeilen und Webspace. Eigentlich geht es ja auch nur um das Standardstyle. Das produziert am meisten Last. Gerade wenn Gäste, Crawler oder User mit Standardstyle unterwegs sind, dann zeigt so ein Caching ja seine Stärken.

Unterschiedliche Styles waren mir bisher zu aufwendig. Aber ich fusioniere jetzt nach und nach alle meine Foren zu einem großen Portal. Dann werde ich wahrscheinlich noch 1-2 weitere dazu nehmen. Aber auch nicht mit Auswahl, sondern erzwungen nach Domain und natürlich gleichen bbcode.tpl's ;)

Leider weiß ich immernoch nicht, welches Maximum man pro Ordner ansetzen soll, was die Dateienanzahl anbelangt. Ich habe einfach mal 1.000 geschätzt und da kommt man schon weit, aber (81*1.000 =) 81.000 mögliche Dateien, wären für Dich schon "wenig" oder? Dann könntest Du nach 3 Stellen vorgehen. Dann wären dass schon 9³ * 1000 mögliche Dateien.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
AmigaLink
Mitglied
Beiträge: 1417
Registriert: 09.06.2003 21:56
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Ich kann deinen Berechnungen momentan nicht so ganz folgen. Was daran liegt das ich schon seit 2 Wochen eine Geburtstags-Party Oeganisiere, die heute Abend stattfinden wird, und somit den Kopf nicht frei habe.

Ich muss zugeben das ich mir nie einen ernsthaften Gedanken über das Dateienmaximum gemacht habe. Zumindest nicht in Bezug auf möglicher Geschwindigkeitseinbusen im Board, sondern nur in Bezug auf die Dateiverwaltung im ACP oder via FTP (Timeout). Und aufgrund der derzeitig vorliegenden Erfahrungen, liege ich da auch garnicht sooo falsch.
Irgendwann im Bereich von 50.000 Dateien muss man schon etwas Gedult aufbringen umd ab 100.000 Dateien bekommt man erste Probleme (Timeout). Aber nur bei der Cacheverwaltung im ACP (Statistk erstellen, Cache löschen) und beim zugriff via FTP.

Wie bereits gesagt finde ich die Idee mit der Verzeichnisstruktur sehr gut. Diesbezüglich werd ich mich mal von dir/euch Inspirieren lassen und mir ebenfalls etwas einfallen lassen. Da ich nicht nach Topics Arbeite, sondern jedes einzelne Posting Cache, kommen bei mir ja weit mehr Dateien auf als bei dir. Von daher werde ich wohl tiefer verschachteln müssen. Mal sehen was mir dazu einfällt.

Jetzt muss ich erstmal weiter machen, sonnst komme ich in ernste Zeitprobleme bezüglich der Party.

Schönes Wochenende ...
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Na dann viel Spaß noch :D

Berechnung zu den Ordnern: (mir ist ein Fehler aufgefallen)

Hauptebene:
1-9 (0 ist nicht möglich, da keine ID mit 0 beginnt)

Zweite Ebene:
0-9

Das wären dann soweit 9*10 mögliche Ordner. Also 90, nicht wie eben gesagt 81.

Geht man in eine dritte Ebene hat man 90 Ordner mit wieder jeweils 10 Unterordnern. Also 900 Insgesamt.

ID 1 würde demnach gespeichert werden unter:

cache/topics/1/0/0/1.php

genauso natürlich 100.php oder 10023.php usw.

Geht man nun von einem Maximum von 1000 Dateien pro Ordner aus, dann hat man bei drei Ebenen 900.000 maximal speicherbare Dateien ohne Geschwindigkeitsverlust.

Gruß
Marc
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Waagenbauer
Mitglied
Beiträge: 219
Registriert: 11.06.2001 02:00
Kontaktdaten:

Beitrag von Waagenbauer »

Ich finde das Thema sehr interessant, da ich selber auch an Cache-Systemen bastel.

Ich habe bei mir z.B. für die Startseite und Kategorien (ähnlich wie mgutt es beschrieb) für die Recent-News und -Artikel ein Cache-System laufen, das die Queries für die fetchposts einspart.
Gibts eine Änderung in den gecachten Topics oder kommt ein Newsbeitrag oder Artikel hinzu, wird der Cache für die Seite erneuert. Dabei wird einmal die Abfrage in fetchpost.php (aus ezportal) gemacht und alle Daten aus dem Query als Array geschrieben und als php-Datei gespeichert und anschließend wieder includet.

Außerdem werden bei mir, in Verbindung mit der SEO, für Gäste alle Forenseiten, Indexe und andere Seiten als html-Seite generiert und in den Root gespeichert.
So ist z.B. http://www.kaltmacher.de/index37.html eine reine statische html-Seite aus http://www.kaltmacher.de/index.php?c=37
Die Seiten werden per Cron-Job stündlich aktuallisiert.
http://www.kaltmacher.de - Die Seite für PC-Freaks und Profis.
Antworten

Zurück zu „phpBB 2.0: Mod Suche/Anfragen“