Seite 1 von 1

Beispielcode für den "acm" Namensraum?

Verfasst: 04.09.2013 02:42
von soldon
Hi,

ich kämpfe gerade mit JSON und damit verbundenen externen Datenabfragen von fremden Servern. Da ich nicht bei jedem Seitenaufruf zahllose Requests an die jeweiligen Server absenden möchte - über den Aufruf der entsprechenden URL, dachte ich mir, ich cache die Aufrufe. Die abgerufenen Daten ändern sich nur selten. Jetzt stehe ich ein wenig auf dem Schlauch. Ich komme aus dem Microsoft C#-Lager und bin erst seit kurzer Zeit bei PHP gelandet. Vermutlich ist die Frage daher peinlich. :D

Aber ich frage trotzdem...

Hier der Code, mit dem ich Caching zu implementieren versuche:

Code: Alles auswählen

if(acm::get(!$id))
{
    echo 'Not cached...';
    $json = file_get_contents("http://server/?ids=$id");
    acm::put($id,$json);
    echo 'Stored in cache...';
}  else {
    $json=acm::get($id);
    echo 'Pulled from cache...';
} 
Die erste Frage wäre: Habe ich ein ACM-Objekt zu instantiieren? Es scheint sich nicht um eine statische Klasse/Funktion zu handeln. Es müsste doch bereits ein globales phpBB-ACM-Objekt existieren?

Ich bräuchte dringend etwas Beispielcode, anhand dessen ich die Verwendungsweise dieser Klasse verstehen könnte. Oder ist dieser Ansatz generell falsch und Caching erfolgt generell innerhalb von phpBB? Die PHP-Code-Datei befindet sich ausserhalb der Verzeichnishierarchie von phpBB und funktioniert im Grunde genommen tadellos. Das heißt, ich bekomme mein JSON-Objekt und kann damit arbeiten, nur aber nicht, wenn ich es so implementiere wie oben aufgeführt. Also, mit Caching.

Re: Beispielcode für den "acm" Namensraum?

Verfasst: 04.09.2013 03:22
von soldon
Da antworte ich mir doch glatt mal selbst... :grin:

Ich habe diese Geschichte folgendermaßen gelöst:

Code: Alles auswählen

$cache = new cache('_meinCache');
if($cache->get(!$id))
    {
        echo 'Not cached...';
        $json = file_get_contents("http://server/?ids=$id");
        $cache->put($id,$json);
        echo 'Stored in cache...';
    }  else {
        $json=$cache->get($id);
        echo 'Pulled from cache...';
    }
Das funktioniert anscheinend. Schon beim ersten Aufruf komme ich in den "Pulled from Cache"-Zweig. Was ein wenig seltsam ist aber solange es funktioniert...

Jetzt hätte ich bloß noch die Frage, ob man das auch so handhabt? Oder ist von dieser Vorgehensweise abzuraten?

Re: Beispielcode für den "acm" Namensraum?

Verfasst: 04.09.2013 20:22
von Miriam
Sollte das nicht eher so aussehen?
if(!$cache->get($id))

Re: Beispielcode für den "acm" Namensraum?

Verfasst: 04.09.2013 21:36
von soldon
Ja, du hast recht. Zwischenzeitlich war mir das auch aufgefallen... :D

Im Moment frage ich mich allerdings, ob man einen neuen Cache mit einem eindeutigen Namen anlegt und dann über eine ID, bzw. einen Variablennamen in diesen Cache schreibt oder ob man jeweils eindeutige bezeichnete Caches erstellt?

Entweder so:

Code: Alles auswählen

$cache = new cache('_meinCache'); 
oder so

Code: Alles auswählen

$cache = new cache('_meinCache' . $id); 
Kann ein angelegter Datei-Cache als Cache-Container fungieren oder habe ich bei 10000 abzufragenden Datensätzen per JSON 10000 einzelne Cache-Dateien?