Variablen persistent halten ?
flashnfantasy
- php
Angenommen ich möchte in PHP eine Zählvariable haben
(die Wirklichkeit ist etwas komplexer)
die jeden Aufruf einer Seite zählt.
Dann habe ich zwei Möglichkeiten, diese Variable zu speichern und verwalten.
Sessionvariable scheidet wohl aus, weil jeder Besucher ne eigene Session hat - und Sessionvariablen sind ja letztlich auch Files.
Was ich jetzt suche ist die Möglichkeit, die Variable im Speicher zu halten und jedesmal direkt abrufen.
Nur habe ich noch absolut keine Ahnung, wie ich da ansetzten kann.
Muß ich da irgendwie dem Server mitteilen, wo die Variablen liegen, hat PHP sowas von sich aus ?
Was ich jetzt suche ist die Möglichkeit, die Variable im Speicher zu halten und jedesmal direkt abrufen.
Warum musst du sie unbedingt im Speicher halten und kannst sie nicht einfach in der DB zählen?
Oder es wäre natürlich auch möglich die Logfiles des Webservers zu verwenden, oder?
Gruß
Casper
Die einzelnen Zugriffe kommen im Sekundenbereich.
Files dauern einfach zu lange und fressen zuviel Rechenzeit.
Datenbank ist schon sehr schnell...
Aber ich hätte es halt gerne noch schneller (und einfacher).
Und ich weiß halt nicht, was alles möglich ist.
Ich habe es schon über Super-Globals und Register versucht, aber das ist auch nicht persistent.
Hallo flashnfantasy,
Die einzelnen Zugriffe kommen im Sekundenbereich.
Files dauern einfach zu lange und fressen zuviel Rechenzeit.
Das stimmt, bei Zugriffen im Sekundenbereich würde ich auch nicht auf Dateien setzen.
Datenbank ist schon sehr schnell...
Aber ich hätte es halt gerne noch schneller (und einfacher).
Ich denke du solltest wirklich eine Datenbank wie z.B. MySQL nehmen.
Da der Server ständig läuft liegen die Anfragen hier wirklich in einem äußerst kleinen Bereich, und du hast es wesentlich komfortabler. Und da die MySQL-Datenbank dies auch im RAM verwaltet, solltest du dein Ziel hierüber sogar relativ leicht erreichen können.
Du kannst dies ja mal an einem Beispiel austesten, indem du dann sehr viele Anfragen auf das gleiche Testskript sendest.
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Hi!
Was ich jetzt suche ist die Möglichkeit, die Variable im Speicher zu halten und jedesmal direkt abrufen.
Nur habe ich noch absolut keine Ahnung, wie ich da ansetzten kann.
Es gibt verschiedene Möglichkeiten:
1. memcached in Kombination mit PECL::memcache. memcached ist ein Dämon-Prozess der Daten im im SHM speichert, auf den Du Dank der PECL::memcache Extension von PHP zugreifen kannst. Geht natürlich auch direkt, aber so eine API macht das ganze natürlich deutlich angenehmer. Wie das funktioniert: http://cvs.php.net/co.php/pecl/memcache/example.php?r=1.1.1.1. Diese Variante hat den großen Vorteil, dass Du mit Sicherheit nur eine Variable hast, die Du darüber hinaus sogar von anderen Servern aus nutzen kannst.
2. Verwendung eines Opcode-Caches (der sowas kann), ich weiß nicht ob PECL::APC das kann (ich glaube schon, aber möglicherweise nur im CVS), oder eben eAccelerator.
Siehe: README (Kapitel "eAccelerator API"). Hier muss man allerdings aufpassen, dass man nicht aus Versehee mehrere SHM-Segmente hat, ich glaube bei manchen SAPIs passiert das. Aber nicht bei Apache/mod_php und auch nicht bei lighttpd/fastcgi (AFAIK).
3. Lösung Möglichkeit wäre ein Eigenbau mit Hilfe der SHM-Funktionen von PHP. Vielleicht hilft Dir hier folgender Artikel: http://www.php-mag.net/itr/online_artikel/psecom,id,448,nodeid,114
Sonst könnte man höchstens noch eine Datei auf einer ramdisk speichern oder was in der Art.
Grüße
Andreas
Danke erstmal.
Bei ZEND gibt es eine Kauflösung für das Problem, APC ist die Open-Source-Alternative.
Mein Problem ist, daß ich den Server gemietet habe und nicht einfach da was installieren kann.
Der Tipp reicht mir erstmal, ich werde mich jetzt mit dem Befehlssatz der Semaphoren und des gemeinsamen Speichers was zurechtbasteln.