include(): keine Datei

campari

Erfahrenes Mitglied
Moin,

ist das möglich irgendwie was anderes als eine Datei über include einzubinden?
Eine Art Stream, oder so, ka wie ich das bennen soll...

Es soll der Inhalt einer Datei erweitert werden, und dieser veränderte Inhalt dann über include eingebunden werden.

Bislang wird der String in Datei geschrieben und dann über include($dirfile) includiert, würde jedoch gerne diesen Umweg nicht gehen:

PHP:
protected function put_tab($file,$anzahl)
	{
		$dirfile = "x/y";
		$repeat[1] = str_repeat("\t", $anzahl);
		if($x = file($file))
		{
			foreach($x AS $y)
			{
				$fileneu .= $repeat[$a]."\t".$y;
				$a = 1;
			}
			$dat = fopen($dirfile, "w");
			fwrite($dat,$fileneu);
			fclose($dat);
			return $dirfile;
		}
	}

Danke für eine Idee!
 
Ja genau in der Art:
PHP:
protected function put_tab($file)
{
	if($x = file($file))
	{
		foreach($x AS $y)
		{
			$filex .= "aenderung".$y;
		}
		return $filex;
	}
}
$file = $this->put_tab("datei.php");
include($file);

Aber das geht natürlich nicht.

Gibts vielleicht ne andere Idee so nach dem Prinzip?

Jedesmal eine Datei schreiben, kostet halt Zeit und Ressourcen. Dachte man könnte das einfach umgehen.
 
Ich habe dein Problem jetzt nicht ganz verstanden, aber vielleicht hilft dir das:
Wenn es dir nur um die Ausgabe geht, kannst du die Datei mit Ajax einbinden, und dann mit setInterval() automatisch immer wieder aktualisieren lassen.
 
Nein, ich benötige include().
Javascript soll zudem nicht verarbeitet werden.

Folgendes:
Es wird eine Datei eingelesen in ein Array.
Jeder Wert der Array-Elemente wird um ein paar Zeichen erweitert.
Das Array wird wieder zu einem String zusammengefasst.
Und dieser modifizierte String wird nun über include eigebunden.

Hoffe das ist verständlich (?)

Chers
 
Was für eine Datei liest du denn überhaupt in ein Array ein? Meinst du, du liest die Datei zeilenweise in ein Array ein?
Ohne wirklich zu wissen, was genau du bezwecken möchtest (Beispiel wäre nicht schlecht), kann dir wohl niemand ohne Glaskugel eine optimale Lösung anbieten.
Um (PHP-)Code dynamisch in PHP ausführen zu können, hilft oftmals die relativ langsame [phpf]eval[/phpf]-Funktion.
Rein von deinem ersten Post ausgehend, würde ich dir empfehlen, das Verändern der Datei am Ende eines Scriptaufrufs durchzuführen, so dass diese beim nächsten Aufruf auch wieder erst am Ende geändert werden müsste. Das geht am besten in einer eigens definierten Shutdown Funktion (Registrieren als shutdown-Funktion nicht vergessen!), da zum Aufruf dieser Funktion keine Daten mehr an den Client gesendet werden und die Schreibarbeit also im Hintergrund ablaufen kann. Kann teilweise nur zu Problemen führen, wenn ein Script auf die beschriebene Datei während der Änderung zugreift... Hier würde eine temporäre Datei während des Schreibvorgangs Abhilfe schaffen (zB _write.tmp), die dann nach dem Ändern in die eigentliche Datei umbenannt wird (Überschreiben der Zieldatei).
 
Hmm also wenn ich das richtig Verstanden hab nutz er eine Datei als kleine Datenbank wo er link zu den Unterseiten speichert und möchte diese dann per include laden.
So das man nicht sieht wenn man auf einen link schaut welche datei geladen wird.

Sowas läst sich aber viel leichter mit einer echten Db lösen wie sbp. Mysql.

Für dein vorhaben mit der Datei were das wohl am einfachsten über eine Klasse zu lösen die das Array bereit stellt und aus dem Array dann die benötigen einträge rausfiltert.

Mfg Splasch
 
Meinst du, du liest die Datei zeilenweise in ein Array ein?
Genau, sry für Ungenauigkeit.
die relativ langsame [phpf]eval[/phpf]-Funktion.
Auf die will ich verzichten.
Shutdown Funktion
Die includierte Datei ist als PHP auszuwerten und das ausgegebene HTML kann nicht irgendwo am Ende stehen. So wie ich deine register_shutdown_function verstehe, würde die Datei aber am Ende ausgeführt und damit eingefügt.
mit einer echten Db lösen wie sbp. Mysql.
Auf die Umwege Datenbank und fwrite() wollte ich verzichten. Aber vielleicht gehts auch einfach nicht.

Idee war folgende:
Includierte Dateien werden im Quelltext ohne Einrückung ausgezeichnet. Der Quelltext sieht irgendwie unprofessionell aus.
Also soll von der vorherigen Zeile, vor der die PHP-Datei includet wird, die Anzahl Tabulatoren um eins addiert und vor jede echo-Zeile der includierten Datei eingefügt werden. Das würde eine sauberen Quelltext produzieren.

Das ganze findet Anwendung in Template-Engine:
PHP:
public function template()
{
	foreach($method AS $suchen => $ersetzen)
	{
		$this->tpl = str_replace('{'.$suchen.'}', $this->inc_f($ersetzen.".php",$f_inc,$anzahl_tabs), $this->tpl);
	}
}
include-Datei puffern:
PHP:
protected function inc_f($file,$f_inc,$anzahl_tabs)
{
	ob_start();
	$file = $this->put_tab($file,$anzahl_tabs);
	if(!@include $file)
	die($f_compile);
	return ob_get_clean();
}
Tabulatoren in include-Datei einfügen:
PHP:
protected function put_tab($file,$anzahl_tabs)
{
	$dirfile = "x/y";
	$repeat_tabs[1] = str_repeat("\t", $anzahl_tabs);
	if($x = file($file))
	{
		foreach($x AS $y)
		{
			$filex .= $repeat_tabs[$a]."\t".$y;
			$a = 1;
		}
		$dat = fopen($dirfile, "w");
		fwrite($dat,$filex);
		fclose($dat);
		return $dirfile;
	}
}

So wies steht, wird ja die modifizierte include-Datei physisch geschrieben.
Und genau das würde ich gerne umgehen, und stattdessen "irgendwie" temporär behandeln.

Danke für die Aufmerksamkeit.

Achja, über Kosten-Nutzen dieser Funktion verbitte ich mir Kommentare ;-)
 
Zurück