PHP globale oder gemeinsame Variable für alle PHP-Scripte in einem Server

pchilfe

Erfahrenes Mitglied
Liebe Freunde,

Habe folgende Frage:

Ist es möglich in PHP ein gemeinsames Array oder andere Datenstruktur zu definieren, wo man auf diesen Array-Inhalt von anderen PHP-Scripte zugreifen kann.

Wenn ja, dann wie gehts das. Ich habe über all gesucht, fand aber keine Antwort oder ist das unmöglich?. irgendwie muss es möglich sein oder?

Bitte dringend um eine Antwort :-(

Vielen Dank
pchilfe
 
Hallo,
du könntest z.B. das Array in einem Script definieren und dieses Script in die anderen Scripte mit [phpf]include[/phpf] oder [phpf]require[/phpf] einbinden.

mfg
forsterm
 
Man muss es irgendwo zwischenlagern, unter anderem deswegen gibt es ja Datenbanksysteme oder eben auch Dateien usw.

ein direkter Zugriff von einem Script aufs Andere ist nicht möglich, man kann aber von einem Script ans andere Daten übergeben (halt Get/Post/Cookies und Sessions) oder man fragt mit dem einen Script Daten vom anderen über einen Service (XML-RPC etc.) ab.

Edit: natürlich, includes sind auch ein weg, voll übersehen :-)
 
Hallo,

Vielen dank für deine Antwort. Das habe ich ja versucht. Aber mit include() oder require() wird das erste Script komplet ausgeführt. Meine Idee ist es Daten aus dem Danbank zu lesen in einem Array zu speichern wo andere scripte darauf zugreifen ohne den ersten scripte auszuführen.

Beispiel:

Scripte (1) : liest aktuelle Daten von der Datenbank -> in einem array speichern.

Scripte(2): liest nur den Array-Inhalt.

ich möchte es so programmieren, damit alle User in einem Online-Shopsystem nicht immer auf die Datenbank gleichzeitig zugreifen, sondern einmal von der Datenbank lesen für alle User.

Bitte um Hilfe ....

Vielen Dank
 
du könntest einmal das Array erstellen und ein einer seperaten, vom Script zu erstellenden PHP-Datei speichern, welches dann von den anderen included wird.
 
Ich stelle hier meine Frage,nur dann wenn ich alles probiert habe.

Wenn ich im ersten Script die superglobele variable

HTML:
$GLOBALS["Inhalt"]; oder $_POST['Inhalt'];

definiere, erkennt das andere Script den Index 'Inhalt' nicht.

Wenn ich vom ersten Script ein PHP-Datei erstelle und im zweiten PHP-Script mit includ() oder require() einbinde, geht der Inhalt des Arrays verloren.

Es ist möglich global aktuelle Daten von der Datenbank für alle User zu lesen?

Vielen Dank ...
 
ich glaube da liegt ein Missverständnis vor ;-)

Der Trick ist, du erstellst das Array einmal komplett, schreibst daraus eine PHP-Datei und inkludierst die beim anderen Script. PHP läuft nicht wie ein Applikationsserver oder eine andere Desktopanwendung oder ähnliches ab, spricht: Jedes Script stellt eine in sich geschlossene "Anwendung" dar. Es hat gewisse Schnittstellen (eben POST/GET etc.), aber an sich ist es in sich geschlossen. Nach einem Durchlauf gehen auch alle darin enthaltenen Variablen flöten.

Wie ich mir das bei dir vorgestellt habe (ich muss allerdings sagen das ich in deinem Fall einen sinnvollen Querycache vom DBMS eher für angebracht halte) sieht ungefähr so aus:

Script das die Datei mit dem Array erstellt.
PHP:
<?php

// die Funktion holt gar schröcklich viele Daten aus der Datenbank und speichert es in $array
$array = getDataFromDatabase();

// diese Funktion speichert das Array in der Datei
saveArrayToFile($array, 'arrayCache.php');

die Datei sieht dann ungefähr so aus:
PHP:
<?php
// arrayCache
$array['1'] = 'Badelatschen';
// ... hier folgen weitere Einträge
$array['25653244653543'] = 'Socken';
?>

so, und dann guckst du im anderen Script ob die Cache Datei da ist, und inkludierst sie ...
PHP:
<?php

if( is_readable('arrayCache.php') )
{ 
   include('arrayCache.php');
}
?>

das ist natürlich nur ein sehr grob umzeichnetes Konzept. Die genaue Implementierung muss dann natürlich noch überdacht werden und man sollte vor allem auf die atomare Bearbeitung der Datei achten, sonst kann es schnell zu Fehlern kommen, Stichwort Race Conditions.

Aber wie gesagt, ich würde eher gucken ob man nicht an anderer Stelle was drehen kann, von der Datenbank-Seite her.
 
Effizienz Frage

habe ein Script geschrieben, das mir aus dem Datenbank jede 60 Sekunden aktuelle Inhalte liest in einem PHP-Script-Datei in einem Array speichert.

jetzt kann ich mit includ() jede 65 Sekunden die PHP-Datei mit include() einbinden. Ich kann auf dem Array zugreifen und alle Daten-Inhalte mit javascript beliebig sortieren und anzeigen lassen.

Die Frage ist : was ist besser und effizienter?

Aus dem Datenbank direkt für jeden User je 60 sekunden immer lesen oder das Array mit includ() jede 65Sekunden für jeden User einbinden?

Gruß ...
pchilfe
 
Zuletzt bearbeitet:
Wie ich oben schon schrieb, würde ich eher was von der Datenbank-Seite aus machen, Stichwort Query Cache und Prepared Statements. Das sind so zwei Sachen. Dann ist die Frage, ob vielleicht sinnlos Daten mit selektiert werden. Hier kommt man dann auf die Datenbanknormalisierung hinaus und beim SELECT kann man gucken das man wirklich nur die Felder nimmt die man wirklich braucht und keine Wildcard (*) benutzt.

Wie gesagt, Datenbankoptimierung bringt meist mehr, als von PHP-Seite aus was zu machen.

Aber zur Not kannst du das ja einfach mal nachmessen. Wie lange dauert das mit dem Array, wie lange mit der DB? Vielleicht macht man auch ne Mischung aus beidem, Datenbank optimieren und den ArrayCache auf PHP Seite. Nachmessen kannst du ja direkt in PHP, entweder direkt mit dem Benchmark-Paket aus PEAR oder ganz simpel mit microtime oder auch mit dem Apache-Tool "ab".
 
Zurück