anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Mi 24 Apr, 2024 10:59

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 44 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Cachehandler
BeitragVerfasst: Mi 19 Dez, 2007 17:40 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Wer die “neue” Version kennt, weiss vermutlich auch, dass diese Version das cachen entdeckt hat. Datensätze, die sich nicht oft ändern, können einfach als Datei gespeichert werden, und diese Datei selbst wird wieder aufgerufen, was natürlich schneller geht, als zuerst Bedinnungen zu prüfen und so.
Den Cache haben auch viele andere Softwareapplikationen. Warum aber sollte das die 0.9.7 nicht können?
Im Rahmen meiner Generalüberhohlung von LoGD hab ich das Problem angenommen und es (natürlich) auch gelöst. Das Objekt veröffentliche ich nun hiermit - es benötigt allerdings PHP5, und die Anwendung erfordert PHP-Kenntnisse.

Achtung, Doppellizenz: Hiermit lizenziere ich diese Dateien ausdrücklich unter der GNU GPL der Version 2.0 oder jedweder späteren Version. Zusätzlich zur GNU GPL gilt allerdings auch die “Creative Commons Licence by-nc-sa”, das Objekt kann also unter der neuen Version gebraucht werden!

$this->bbcode_second_pass_code('', 'class Datacache {

/**

* Cache-Objekt

* (c) 2007-2008 by Basilius "Wasili" Sauter

*

* Version 1.0 vom 4. August 2007

* * Cache verwaltung mit laden, speichern, überschreiben

* Version 2.0 vom 7. Februar 2008

* * Mit RAMCache-Unterstützung (Memcache-Hülse)

* Version 2.1 vom 18. Februar 2008

* * Singleton-Pattern

*/

protected $cache;

protected $usecache = false;



protected static $instance = NULL;



// Only Singleton-Creating is allowed

protected function __construct() {

$this->usecache = CACHE_USE;

}



// No clone allowed.

private final function __clone() {}



public static function getInstance() {

if (self::$instance === NULL) {

self::$instance = new Datacache;

}



return self::$instance;

}



public function &loadCache($cachehandle, $lifetime = 1000) {

if($this->usecache) {

if(isset($this->cache[$cachehandle])) {

return $this->cache[$cachehandle];

}

else {

if(MEMCACHE_USE === true) {

$memcache = RAMCache::getInstance();



$c = $memcache->get($cachehandle);

}

else {

$c = false;

}



if($c === false) {

$filename = $this->getCacheFilename($cachehandle);

if(file_exists($filename)) {

$lastmodified = filemtime($filename);

if((ER_TIMESTAMP - $lastmodified) > $lifetime) {

// Abgelaufen

return false;

}

else {

$this->cache[$cachehandle] = unserialize(file_get_contents($filename));



if(MEMCACHE_USE === true) {

$memcache->set($cachehandle, serialize($this->cache[$cachehandle]));

}



return $this->cache[$cachehandle];

}

}

else {

return false;

}

}

else {

$this->cache[$cachehandle] = unserialize($c);

return $this->cache[$cachehandle];

}

}

}

else {

// Kein Datacaching => False zurück geben.

return false;

}

}



public function updateCache($cachehandle, &$data) {

if($this->usecache) {

$this->cache[$cachehandle] = serialize($data);

$filename = $this->getCacheFilename($cachehandle);



if(file_exists($filename) AND is_writable($filename)) {

$write = true;

}

elseif(is_writable(CACHE_DIR)) {

$write = true;

}

else {

$write = false;

}



// Umgeht einen Bug für Windowssysteme (#27609; http://bugs.php.net/bug.php?id=27609)

if(SERVER_OS == 'Windows') {

$write = true; # Hals und Beinbruch...

}



if($write) {

if(CACHE_USE_SEMAPHORE) {

$semid = $this->getLock($filename);

}



file_put_contents($filename, $this->cache[$cachehandle]);

@chmod($filename, 0777);



if(MEMCACHE_USE === true) {

// Auch in den Arbeitsspeicher speichern.. Hihi

$memcache = RAMCache::getInstance();

$memcache->set($cachehandle, $this->cache[$cachehandle]);

}



if(CACHE_USE_SEMAPHORE) {

$this->releaseLock($semid);

}

}

else {

return false;

}

}

else {

return false;

}

}



public function dropCache($cachehandle) {

$filename = $this->getCacheFilename($cachehandle);



if(file_exists($filename)) {

if(is_writable($filename)) {

if(CACHE_USE_SEMAPHORE) {

$semid = $this->getLock($filename);

}



unlink($filename);



if(MEMCACHE_USE === true) {

// Auch in aus dem RAM löschen.

$memcache = RAMCache::getInstance();

$memcache->delete($cachehandle);

}



if(CACHE_USE_SEMAPHORE) {

$this->releaseLock($semid);

}



return true;

}

else {

return false;

}

}

else return true;

}



// Löscht alle Dateien, die mit $pattern beginnen.

public function massiveDropCache($pattern) {

$pattern = str_replace('*', '__STAR__', $pattern);

$pattern = str_replace(' ', '_', $pattern);

$pattern = preg_replace('/[^[:alnum:]_-]/', '', $pattern);

$pattern = str_replace('__STAR__', '*', $pattern);



$files = glob(CACHE_DIR."$pattern*.tmp");



foreach($files as $file) {

if(CACHE_USE_SEMAPHORE) {

$semid = $this->getLock($file);

}



unlink($file);



if(MEMCACHE_USE === true) {

// Auch in aus dem RAM löschen.

$memcache = RAMCache::getInstance();

$cachehandle = substr($file, 0, strpos($file, '-{'));

$memcache->delete($cachehandle);

}



if(CACHE_USE_SEMAPHORE) {

$this->releaseLock($semid);

}

}

}



public function getCacheFilename($cachehandle) {

$cachehandle = str_replace(' ', '_', $cachehandle);

$cachehandle = preg_replace('/[^[:alnum:]_-]/', '', $cachehandle);

$cachehandle = CACHE_DIR.$cachehandle.'-{'.sha1($cachehandle).'}.tmp';

return $cachehandle;

}



protected function getLock($filename) {

if(SERVER_OS === 'Unix' AND function_exists('sem_get')) {

if(!file_exists($filename)) {

file_put_contents($filename, '');

@chmod($filename, 0777);

}



$sem_key = ftok($filename, 'L');

$sem_id = sem_get($sem_key, 1, null, 1);



// Blockierung, bis Semaphore freigegeben ist

if(sem_acquire($sem_id) == true) {

return $sem_id;

}

else {

return false;

}

}

else {

return -1;

}

}



protected function releaseLock($sem_id) {

if(SERVER_OS === 'Unix' AND function_exists('sem_get')) {

if($sem_id !== false) {

return sem_release($sem_id);

}

else {

return true;

}

}

else {

return -1;

}

}

}')

Als letztes benötigen wir nun noch die Funktion, welche Datenbank und Cache verbindet - nennen wir sie db_cached_query:

$this->bbcode_second_pass_code('', 'function &db_cached_query($sql, $cachehandle, $lifetime = 1000) {
global $dbqueriesthishit,$dbtimethishit;

$DataCache = DataCache::getInstance();
$data = $DataCache->loadCache($cachehandle, $lifetime);

if(!is_Array($data)) {
$dbqueriesthishit++;
$dbtimethishit -= microtime(true);

$res = db_query($sql);
$data = array();

if(db_num_rows($res) > 0) {
$data = array();

while($row = db_Fetch_Assoc($res)) {
$data[] = $row;
}
}

$dbtimethishit += microtime(true);

$DataCache->updateCache($cachehandle, $data);
}

return $data;
}')

Zur Anwendung

Ich habe bei mir sogar die Commentary gecached. Leider weiss ich nicht, in wiefern sich das von der Geschwindigkeit ändert, da mein Server nicht unter Last läuft - Entwicklunsserver auch. Allerdings will ich die Anwendung am Beispiel meiner Datenbankfarben erklären.
Da cached_query alle Datensätze als Array liefert, ist es notwendig, den Datensatz anders zu behandeln, als normalerweise. Anstatt einer While()-Schleife nehmen wir die für Arrays gedachte foreach().
Die Funktion “load_Tags” würde also wie folgt aussehen:

$this->bbcode_second_pass_code('', 'function Load_Tags() {
global $db,$link;
/* (c) 2005 by Eliwood & Serra */
$tags = array();
$rows = db_cached_query('SELECT * FROM appoencode', 'appoencode', 60*60*24);
foreach($rows as $row) {
$tags[$row['code']] = $row;
}
return $tags;
}')

Als drittes benötigt man noch 4 Konstanten, die in den Kopf der common.php einzupflegen sind:
$this->bbcode_second_pass_code('', '// Cache-Erweiterung
define('CACHE_DIR', './cache/');
define('CACHE_USE', true);
define(ER_TIMESTAMP, time());
// Server-OS definieren. Unterscheidet Windows/Unixoid
if(strpos($_ENV['OS'], 'Win')) {
define('SERVER_OS', 'Windows');
}
else {
define('SERVER_OS', 'Unix');
}')

Bitte achtet darauf, dass PHP im gewählten Ordner Schreibrechte besitzt! Für Unix-User kann man auch einfach /tmp angeben, das sollte PHP immer Schreibrechte besitzen. /tmp ist der Ordner im Verzeichnisbaum, der genau für so etwas vorgesehen wurde.


Bei der Funktion db_cached_query ist der erste Parameter der eigentliche Query (der selbst nicht ständig anders sein sollte, sonst machts keinen Sinn). Der Zweite Parameter ist der Name der Cache-Datei - also bitte eine Eindeutige Indentifikation vergeben. Der dritte Parameter schliesslich stellt die Lebenszeit in Sekunden ein. Oben ist es nun ein Tag, bei den Farben rentiert sich sogar eine viel grössere Lebenszeit, Monate, wenn nicht sogar ein volles Jahr.
Was nun beachtet werden muss, ist, dass man den Cache bei einer Änderung wieder löscht. Hat man den Farbeneditor (Hier verfügbar, nicht von mir), so kann das noch schnell passieren. Hier lässt sich aber auch hervorragend dagegen vorgehen: Man löscht einfach Automatisch die Cache-Datei. Bei Änderungen in der Datenbank muss man das selbst machen.

Das löschen der Datei sollte in etwa so aussehen:

$this->bbcode_second_pass_code('', '$DataCache = Datacache::getInstance();
$DataCache->massiveDropCache("appoencode");')
Oder:
$this->bbcode_second_pass_code('', '$DataCache = Datacache::getInstance();
$DataCache->dropCache("appoencode");')

Damit der Cache aber funktioniert, muss man noch in der common.php eine Änderung durchführen. Man muss die beiden Objekte und die Funktion einbinden, sowie den Cache “aktivieren”, kurz nach der Verbindung mit der Datenbank:

$this->bbcode_second_pass_code('', '// Datacache erstellen und registrieren
$DataCache = DataCache::getInstance();')

Viel Spass damit :)

PS: Ich spare mit dem Ding etwa 6 von 10 Queries auf der Startseite. Und viel eingearbeitet ist es noch nichtmal :)

Zitat:
Mit Cache: 4 Queries in 0.00717s
Ohne Cache: DB: 10 Queries in 0.0874s

Einfachprobe, unter Ubuntu GNU/Linux 7.10 mit Apache 2.2.4 und PHP 5.2.3-1 und MySQL 5.0.45-Debian_1ubuntu3-log


(Achtung zu den Daten: Ich cache noch viel, was es in der Standardversion gar nicht gibt! Nicht enttäuscht sein, wenn die Werte anders sind.)


Zuletzt geändert von Eliwood am Do 20 Dez, 2007 18:03, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 19 Dez, 2007 20:26 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 15 Okt, 2005 14:06
Beiträge: 864
Geschlecht: Männlich
LoGD: http://shinobilegends.com
*zwei daumen hoch*

exzellent =)

_________________
Entwicklung Lotgd 1.2.2 +nb
1.2.1 +nb ist final

Bugreports/Testing erwünscht, http://nb-core.org

Wichtige Info für Programmierersucher:
viewtopic.php?f=34&t=4285


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 20 Dez, 2007 00:20 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
hab's zwar nur überflogen, aber ich muss mich Nightborn absolut anschließen: Ausgezeichnete Arbeit...

*schmacht* OOP unter PHP5 ist schon was tolles

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 20 Dez, 2007 07:39 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Kann mich dem ebenfalls nur anschliessen: Absolut toll :-)
Nur wurde der Timestamp noch nicht definiert ;-)
Müsste man wohl noch hinzufügen

[php]define('ER_TIMESTAMP, time());[/php]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 20 Dez, 2007 18:05 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Harthas hat geschrieben:
Nur wurde der Timestamp noch nicht definiert ;-)
Müsste man wohl noch hinzufügen

[php]define('ER_TIMESTAMP, time());[/php]


Oh. Da hab ich mich bereits so dran gewöhnt :D Hab auch SERVER_OS vergessen. Dankeschön!

@Komplimente:

Dankeschön! :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 20 Dez, 2007 18:08 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Hab es bei mir inzwischen probeweiser für einige Dinge eingebaut... Und funktioniert nach der Umstellung der Query's, sowie deren Handhabung wirklich ohne Probleme ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 20 Dez, 2007 19:27 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Harthas hat geschrieben:
Hab es bei mir inzwischen probeweiser für einige Dinge eingebaut... Und funktioniert nach der Umstellung der Query's, sowie deren Handhabung wirklich ohne Probleme ;-)


Sehrrr gut. Jetzt vielleicht nur noch überprüfen, ob wirklich gecached wird, oder immer neue Daten geholt werden :D
*scherzt*
Eigentlich sollte es ja laufen. Tut es bei mir ja auch ;) Was zwar eigentlich nichts heisst, aber alles notwendige sollte nun dabei sein. Konstanten sollten auch keine mehr fehlen. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 20 Dez, 2007 19:34 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
*gg* Es wird gecacht... Derart wenige SQL-Query's hatte ich quasi noch nie. ;-)

Mal schauen, vielleicht fällt mir ja noch irgend eine Erweiterung dazu ein... *grübel* Mal schaun, mal schaun.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 21 Dez, 2007 01:25 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
Kuhle Objekte. Sehr schön!

Kleinen Hinweis vielleicht noch zum Cachen.
Nicht einfach blindlings alles cachen was cachebar aussieht, denn ihr müsst bedenken dass die Daten auch von der Festplatte gelesen werden müssen und die ist alles andere als schnell. Bei einem großen Server hingegen liegen viele Datenbanken bereits komplett im RAM.
Cachen... ja, geile Sache. Aber für eine kleine Query, die vielleicht sogar noch komplett auf einem Index ausgeführt werden könnte, lohnt sich das nicht und ist sogar oft kontraproduktiv.
Ich würd mir primär Queries vornehmen die Joins über mehrere Tabellen machen und die versuchen zu Cachen.

Wir haben z.B. versucht die Settings zu cachen...war ein Misserfolg, hat nix gebracht und führte zu komischen Ergebnissen.
Accounts kann man auch nicht cachen, da sie sich bei jedem Seitenaufruf ändern...usw...

Nicht dass das falsch rüber kommt, ich liebe es zu cachen...jede Menge...VIIIEL :-)

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 21 Dez, 2007 09:19 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 15 Okt, 2005 14:06
Beiträge: 864
Geschlecht: Männlich
LoGD: http://shinobilegends.com
GERADE die settings sollte man cachen, die werden *jeden* pagehit ausgeführt...

und das nicht durch den sql server cachen zu lassen, sondern einfach durch das filesystem ist gut.

ich habs bei 1.x.x gemacht (das ging bis 1.1.1 nämlich nicht), und man merkt schon n gewinn.

alles, was KAUM verändert wird aber OFT gebraucht wird, cachen.

_________________
Entwicklung Lotgd 1.2.2 +nb
1.2.1 +nb ist final

Bugreports/Testing erwünscht, http://nb-core.org

Wichtige Info für Programmierersucher:
viewtopic.php?f=34&t=4285


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 21 Dez, 2007 17:25 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Naja, bevor man sich da aber Unmengen von Caching-Funktionen bastelt sollte man sich - wenn möglich - auch mal die PEAR Pakete Cache und Cache-Light anschauen. Da kann man dann auch so lustige Sachen wie "Cache im RAM" oder so anstellen.

Wenn man sich ein bisschen mit MySQL beschäftigt wird man auch recht bald auf HEAP-Tables stoßen, die ebenfalls im RAM liegen. Die sind zwar bei einem Reboot futsch, aber wenn man schon dabei ist kann man sich auch gleich die entsprechenden Trigger einrichten, die die einerseits regelmäßig updaten, backupen und bei einem Server-Restart neu laden. Wenn man auf einem hochlastigen Server die wichtigesten Teile der Accounts in eine HEAP-Table kopiert und alle 1-5 Minuten in eine MyISAM speichert, dürfte das schon einmal einen enormen Geschwindigkeitszuwachs bedeuten - vorrausgesetzt, man hat genügend RAM, aber dessen Preise stagnieren ja so oder so zurzeit ^^

Schon lustig, was sich alles für möglichkeiten ergeben, wenn man erst mal genauer bei MySQL hinschaut!

Grüße,
Auric

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 22 Dez, 2007 00:14 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Nun Auric,
das Problem bei dem ganzen wird nur noch sein, WO man es am besten in LotGD nutzen könnte, wenn überhaupt. Selbst mit einem Backup, wäre es noch zu riskant, und wirklich viel Sinn würde ich dann auch nicht darin dann sehen. (Denn ich glaube kaum, dass es dann so erheblich schneller macht - ehr den Server umso langsamer, je nach RAM bedarf / belegung; Verfügbarkeit)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 22 Dez, 2007 00:22 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 15 Okt, 2005 14:06
Beiträge: 864
Geschlecht: Männlich
LoGD: http://shinobilegends.com
@mysql
innodb... langt auch =)

@cache
macht eAccelerator

_________________
Entwicklung Lotgd 1.2.2 +nb
1.2.1 +nb ist final

Bugreports/Testing erwünscht, http://nb-core.org

Wichtige Info für Programmierersucher:
viewtopic.php?f=34&t=4285


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 23 Dez, 2007 10:53 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
@Nightborn
Mit den Settings magst du Recht haben, aber ich hab bei mir festgestellt dass sie sich einfach zu oft ändern als das es sich lohnen würde. Ich weiß natürlich nicht wie groß die Tabelle bei 1.1.x ist, aber bei mir ist sie mit allem drum und dran keine 300kb groß und liegt deswegen schon nach der ersten Anfrage im MySQL Query Cache.
Als ich es mit nem Filecache versucht habe kamen komische Dinge heraus die auf Race Conditions hinauslaufen.
Gut, ich denk ne universallösung gibts nicht, muss jeder für sich selbst rausfinden obs passt oder nicht. das ändert ja nix an der Qualität obiger Klassen oder dem Sinn allgemein.

@eaccelerator: jöööö!
@innodb: Geschwindigkeitsvorteil sehr groß, aber deutliche schwerer zu optimieren als MyISAM...ich kenn leider bisher noch nicht alle Schräubchen...Schrauben...BOLZEN

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 23 Dez, 2007 11:35 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 15 Okt, 2005 14:06
Beiträge: 864
Geschlecht: Männlich
LoGD: http://shinobilegends.com
deine settings ändern sich im laufenden betrieb?

ok, dann machts keinen sinn.

Oo meine bleiben gleich. Dauernd, wie es bei generellen Spieleinstellungen sein sollte im laufenden Betrieb.

_________________
Entwicklung Lotgd 1.2.2 +nb
1.2.1 +nb ist final

Bugreports/Testing erwünscht, http://nb-core.org

Wichtige Info für Programmierersucher:
viewtopic.php?f=34&t=4285


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 23 Dez, 2007 13:26 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Nightborn hat geschrieben:
deine settings ändern sich im laufenden betrieb?

ok, dann machts keinen sinn.

Oo meine bleiben gleich. Dauernd, wie es bei generellen Spieleinstellungen sein sollte im laufenden Betrieb.


Die '97 speichert noch viel in den Einstellungen ;) Wahrscheinlich weniger viel statisches, als die 1.x


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 23 Dez, 2007 13:30 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Bei mir verändert sie sich allerdings recht selten ^^
Hatte es letztens mal kontrolliert, d.h. das Cachen der Settings lohnt sich auch wirklich.

Naja, jetzt mal abgesehen vom goldenen Ei vielleicht ^^'


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 23 Dez, 2007 19:53 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
Bei meiner 0.97er ändert die setnewday.php zumindest einiges. zB: Wetter für Tag und Nacht ... und dann gibts ja auch noch diesen begossenen Pudel dem eine kleine Regenwolke hartnäckig folgt :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 24 Dez, 2007 11:08 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 15 Okt, 2005 14:06
Beiträge: 864
Geschlecht: Männlich
LoGD: http://shinobilegends.com
wenns nur einmal am newday alle X stunden ist, OK.

_________________
Entwicklung Lotgd 1.2.2 +nb
1.2.1 +nb ist final

Bugreports/Testing erwünscht, http://nb-core.org

Wichtige Info für Programmierersucher:
viewtopic.php?f=34&t=4285


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Cachehandler
BeitragVerfasst: Sa 12 Jan, 2008 18:38 
Offline
Newbie

Registriert: Mo 05 Nov, 2007 15:39
Beiträge: 2
Erstmal ein freundliches Hallo an alle, ich bin der Neue XD

Das System ist großartig^^
Ich hab aber eine Frage dazu. Mein Editor hebt das "System" wie ein PHP-Funktion hervor. Da es ja scheinbar bei allen funktioniert wird es das bei mir wohl auch, trotzdem wüsste ich gern ob dies ein Fehler in meinem Editor ist, oder was es sonst mit dem "System" auf sich hat.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 44 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 63 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum