Blackbenji schrieb:
Hallo,
ich habe geräde ein Verständnisproblem zum Thema Include_once/Require_once.
Innerhalb meiner index.php lade ich eine Config-Datei mit Variabeln.
Angenommen innerhalb der index.php verändere ich diese Werte, so werden diese nach dem Reload mit den Werten aus der Config-Datei wieder überschrieben.
Ich suche gerade aber nach einer Möglichkeit, diese Config-Datei nur einmal innerhalb der laufenden Session zu laden und zur Laufzweit nicht ein weiteres mal zu laden.
Gibt es so eine möglichkeit?
Vielleicht solltest du dir vor Augen halten: sobald du Output im Browserfenster siehst ist dein PHP Programm im Regelfall beendet. Alles danach ist nur ein erneutes Starten des Programms, dementsprechend gilt das _once natürlich nur für einen Durchlauf, im 2. hätte er die Config sonst gar nicht mehr.
Um zwischen den Durchläufen Daten zu tauschen gibt es nur eine Hand voll Möglichkeiten, nämlich a) die Infos ins HTML in irgendwelche Inputfelder zu packen und dann im nächsten Durchlauf aus Post/Get auszulesen oder b) das ganze in die Session packen oder c) das ganze in der Datenbank zwischenspeichern oder d) in eine Datei zwischenspeichern.
Wie du das jetzt löst ist dir überlassen, im Endeffekt wirst du _immer_ in irgendeiner Form schauen müssen, ob du die Config schon gezogen hast und wenn ja mit den gespeicherten Werten aus POST/GET/SESSION/DB/Datei überschreiben. Ich an deiner Stelle würde in der Configdatei ein Array mit den entsprechenden Werten setzen:
$aConfig = array('bla' => 3, 'blo' => 4, 'xyz' => 0.5);
Diese Werte lädst du über ein include in der Index.php, änderst sie wie du lustig bist und packst das ganze am Ende in die Session: $_SESSION['config'] = serialize($aConfig);
Oben nach dem Include machst du dann einfach ein:
if(isset($_SESSION['config'])) {
$aConfig = array_merge($aConfig, unserialize($_SESSION['config']));
}
Das überschreibt in deinem Configarray dann alle Werte aus der Include mit denen aus der Session. Das array_merge hat den Vorteil: wenn du in deiner Include einen neuen Configwert einträgst, bleibt der auch erhalten wenn noch ein alltes Configarray in der Session steht. Ansonsten solltest du nicht vergessen $_SESSION['config'] beim Abmelden entsprechend zu löschen, bzw die Session korrekt zu beenden.