Hi!
<?php
$array = array(1,2,3);
$fp = fopen('cache','w');
fputs = ($fp, "<?php\n$cache_array=".var_export($array, TRUE).";\n?>");
fclose($fp);/* und im Alltag brauchen wir dann nur: */
include('cache');
print_r($cache_array);
?>
Jetzt habe ich aber doch erstmal einen Schreck bekommen, dass ich etwas sehr brauchbares noch nicht kennen würde, aber das war eine "1.April-Lösung" von die (oder?),
Nein, das meine ich schon ernst!
da sie "von hinten durch die Brust ins Auge"
naja, findest Du das jetzt ernsthaft kompliziert? Es ist nur nicht schön :)
unter schwerer Missachtung flexibler Namensräume
was sich aber auch recht problemlos lösen lässt, z.B. über ein singleton-pattern in einer Funktion oder Methode...
keinesfalls mehr leistet, als ein
[...]
mir fällt kein effektiverer Weg ein. Vergiss das Schreiben, das wichtige ist das Lesen(zumindest wenn sich die Daten verhältnismäßig selten ändern).
Beim Schreiben legt der Code eine Datei an, in der steht nur:
<?php
$cache_array = array(1,2,3);
?>
Und solange sich ab diesem Zeitpunkt nichts an diesen Daten ändert, kannst Du auf die Daten zugreifen, indem Du das Script per include('datei') einbindest, da es die Daten als fertigen PHP-Code enthält, kannst Du _direkt_ darauf zugreifen.
Und das was mir an der Idee am besten gefällt, wenn Du einen Opcode-Cache wie Turck, APC oder sonstwas einsetzt, dann wird PHP diesen erzeugten Array in Form von Opcode im Shared-memory, also im RAM halten. Das heißt, das erzeugte Script muss ab da weder von der Platte gelesen werden, noch geparst werden, es wird der Opcode aus dem Ram gelesen und ausgeführt. Und das finde ich durchaus effizient (für PHP-Verhältnisse) ;-)
Naja, und zu Deinem Namensraum-Problem, Du darfst das halt nicht im globalen Scope einbinden, dann ist doch alles gut ;-)
Nun gut, ein Anschauungs-Objekt:
write.php:
<?php
function writeCache($data) {
$fp = fopen('cache','w');
fputs($fp,"<?php\n$cache_array=".var_export($data,TRUE).";\n?>");
fclose($fp);
}
$array = array(1,2,3);
print_r ($array);
writeCache($array);
?>
read.php
<?php
function & getCache() {
static $cache;
if (!isset($cache)) {
include('cache');
$cache = $cache_array;
}
return $cache;
}
$blabla =& getCache();
var_dump($blabla);
var_dump($cache_array); // NULL!
?>
So mal prinzipiell. Was spricht Deiner Meinung nach dagegen? Bedenke dabei meine Gedanken bzgl. Opcode-Cache... erst damit wird es wirklich interessant. Man könnte die Daten natürlich auch selber direkt ins SHM schreiben, naja... http://de3.php.net/manual/de/ref.sem.php
Wenn Dir danach ist kannst Du Dich gerne mit Hilfe eines Benchmarks davon überzeugen ;-) (Am besten mal mit Opcode-Cache, mal ohne...jaja, ich weiß Du hast besseres zu tun ;-))
Grüße
Andreas