Variable von externer Datei auslesen - ohne include()!
Patrick D.
- php
Hallo,
folgendes Problem: In einer index.php möchte ich den Titel einer Include-PHP-Datei in den ersten Zeilen auslesen, ohne die Datei komplett zu includen (da dann eben auch gleich der Inhalt dargestellt werden würde).
Bisher habe ich das mit einem ob_start() und ob_end_clean() vor bzw. nach dem include() der Datei gelöst. Somit konnte ich die Variable 'auslesen', ohne die Datei sichtbar einzubinden.
Befindet sich in der einzubindenden Datei jedoch ein mysql_query()-Befehl, so wird dieser auch doppelt ausgeführt (einmal in den ersten Zeilen, im Output-Buffer), und einmal 'weiter unten', wenn die Datei tatsächlich & sichtbar eingebunden wird.
Frage deshalb: Wie kann in in der index.php die in der Include-Seite gesetzte $title Variable auslesen, ohne a) die Datei auf Userseite auszugeben (wie bisher) und b) ohne die Include-PHP-Datei weitere Funktionen ausführen zu lassen (eben z.B. eine mysql_query()).
Vielen Dank im voraus.
http://de.php.net/fopen - ber das ist schon arg pervers
irgendwas machst du beim programmieren falsch btw ;)
Kurze Anmerkung: Mir ist bewusst, dass ich die mysql_query() in diesem Falle unterbinden kann, indem ich z.B. erst nach dem ersten include() zwecks $title-Variable eine mysql_connect.php einbinden kann - somit wäre keine mysql_query in erstem Fall möglich.
Dennoch muss es da doch bestimmt eine andere Variante geben, oder?
echo $begrüßung;
folgendes Problem: In einer index.php möchte ich den Titel einer Include-PHP-Datei in den ersten Zeilen auslesen, ohne die Datei komplett zu includen (da dann eben auch gleich der Inhalt dargestellt werden würde).
Solche Probleme vermeidet man, indem man in seinem Programm strukturiert und die einzelnen Teile nach Eingabe, Verarbeitung und Ausgabe trennt (EVA-Prinzip). Dann kann einem die Ausgabe nicht schon bei der Eingabe ins Handwerk pfuschen.
Frage deshalb: Wie kann in in der index.php die in der Include-Seite gesetzte $title Variable auslesen, ohne a) die Datei auf Userseite auszugeben (wie bisher) und b) ohne die Include-PHP-Datei weitere Funktionen ausführen zu lassen (eben z.B. eine mysql_query()).
Man kann Funktionalität in Funktionen unterbringen. Diese werden beim Inkludieren nicht sofort ausgeführt, sondern erst wenn man sie explizit aufruft.
echo "$verabschiedung $name";
Hallo,
möchte ich den Titel einer Include-PHP-Datei in den ersten Zeilen auslesen, ohne die Datei komplett zu includen
Wieso includest du eine Datei, deren Inhalt du auswerten willst? Du solltest sie als Textdatei behandeln:
if ( file_exists( $name ))
{
$datei = file( $name );
for ( $i=0; $i<count($datei); $i++ )
{
// Zeile $datei[$i] untersuchen
if ( ..gefunden.. ) break; // for-Schleife abbrechen
}
}
LG Kalle
Hello,
if ( file_exists( $name ))
{
$datei = file( $name );
Das Arbeiten mit file_exists() und file() ist für ordentliche Arbeit so nutzlos wie ein Kropf.
Zwischen der Abfrage und dem Einlesen kann sooo viel passieren.
Auch während des Auslesens mit file() kann das File noch verändert (verstümmelt) werden.
Diese Befehle müssten dringend aus PHP entfernt werden oder aber ersetzt werden durch welche, die konkurrierenden Betrieb unterstützen.
Ein harzliches Glückauf
Tom vom Berg
Hello,
Das Arbeiten mit file_exists() und file() ist für ordentliche Arbeit so nutzlos wie ein Kropf.
Diese Befehle müssten dringend aus PHP entfernt werden oder aber ersetzt werden durch welche, die konkurrierenden Betrieb unterstützen.
Du möchtest ein File sperren während des Zugriffs?
Kenne ich noch aus uralten DOS- Tagen. Semaphore setzen und so. Wie macht PHP das denn?
Kalle
Hello,
Das Arbeiten mit file_exists() und file() ist für ordentliche Arbeit so nutzlos wie ein Kropf.
Diese Befehle müssten dringend aus PHP entfernt werden oder aber ersetzt werden durch welche, die konkurrierenden Betrieb unterstützen.
Du möchtest ein File sperren während des Zugriffs?
Kenne ich noch aus uralten DOS- Tagen. Semaphore setzen und so. Wie macht PHP das denn?
PHP unterstützt out-of-the-box das advisory Filelocking, hält sich aber bei seinen eigenen namensbasierten File-Funktionen nicht daran.
Dabei wäre es ein leichtes, in der nächten Version einen zusätzlichen Parameter einzuführen
$_list = file($filename, $lock = LOCK_SH);
Wenn $lock nicht angesprochen wird, wird es in Zukunft automatisch auf LOCK_SH gesetzt, nur wenn man Lotteriespiel mag, kann man es dann auch auf LOCK_UN setzen oder wenn man paranoid ist auf LOCK_EX
Das sollte für alle namensbsierten File-Funktionen entsprechend umgesetzt werden.
Als ich das letute Mal in den Quellcode geschaut habe, war das noch nicht so...
Ein harzliches Glückauf
Tom vom Berg