Destruktor führt file_get_contents nicht aus

fink-x

Mitglied
Hallo

eine Frage, warum funktioniert dieser Code nicht oder hab ich ein Denkfehler?
In der Methode get_main_template() wird er ausgeführt und im Destruktor gibt er mir eine Fehlermeldung, dass die Datei nicht gefunden wurde.

PHP:
...
var $template_path = "./templates/";
var $mainTemplate;

private function set_main_template()
{
		$this->mainTemplate = file_get_contents($this->template_path."main.html");
		echo $this->mainTemplate;
}
function __destruct()
{
		$this->mainTemplate = file_get_contents($this->template_path."main.html");
		echo $this->mainTemplate;
}
...

Danke für die Hilfe
 
Wie wird der Destruktor denn aufgerufen?

Denn merke:

php.net hat gesagt.:
Destructors called during the script shutdown have HTTP headers already sent. The working directory in the script shutdown phase can be different with some SAPIs (e.g. Apache).
 
Wenn du mit absoluten Pfaden arbeitest, sollte es funktionieren. Du kannst ja einfach Folgendes machen:
PHP:
public function setTemplatePath($path)
{
	$this->template_path = realpath($path);
}
Damit ist der Pfad immer absolut. Du solltest aber berücksichtigen, dass realpath() false liefert, falls der Pfad ungültig ist. Außerdem werden die Pfade ohne abschließenden Schrägstrich wiedergegeben.
 
Das mit realpath() funktioniert leider nicht so gut, glaub ich, da das System Windows ja mit "\" arbeitet und UNIX mit "/" daher müsste ich dann wieder eine Unterscheidung einbringen auf welchem System das Script läuft. Und ich glaub da ist der Aufwand zu groß und ich realisiere das anders.
Oder seh ich gerade den Wald nicht :-)

Im Grunde soll dieses Script nichts anders machen als, bestimmte Schlüsselelemente in einem Template zu ersetzten sobald alle anderen Scripte ausgeführt wurden. Dass ermöglicht mir Fehlermeldungen oder sonstigen dynamisch zu generieren. Das Script oben ist nur ein Beispiel, da ich nicht das komplette Script posten wollte.

Edit:// Dazu werden einzelne Templates geladen. Das wollte ich eigentlich noch dazu schreiben.

Und da das Programm auf Windows sowie auf Linux Servern läuft, wird das mit realpath() glaub ich umständlich.

Aber allem in allen geb ich dir vollkommen recht @Gumbo das mit der Funktion, genau mein Problem gelöst wird.

Vielen Dank
 
Du könntest den Destruktor einfach manuell aufrufen, anstatt ihn bei Skriptterminierung automatisch aufrufen zu lassen.
 
Hi, Windows arbeitet sowohl mit \ als auch mit /. Desshalb ist realpath() auch kein Problem, du kannst immer / verwenden, dann funktioniert es.
 
Zurück