Archiv verlassen und diese Seite im Standarddesign anzeigen : include() liefert nicht das gewuenschte Ergebnis
Dominic Suter
06.02.2002, 23:11
Hallo zusammen.
Ich habe eine Datei index.php. Auf der ist eine Tabelle mit 2 Spalten. In der linken soll mittels include eine Datei "navigation.php" eingebunden werden. In der rechten wird der Inhalt mit Fasttemplates angezeigt.
Nun habe ich das Navigationsscript fertig und wollte dies per <?PHP
include ("/navigation/navigation.php");
?>
einbinden. Doch leider funktioniert dies so nicht. Also probierte ich die Datei als navigation.inc zu speichern und entsprechend einzubinden. Leider geht auch das nicht. Als naechstes habe ich der Navigation die <?PHP ?> Tags entfernt. Nun wurde das File zwar eingebunden aber nicht mehr geparst.
Wie muss ich es anstellen, dass eine php Datei in einer anderen php Datei eingebunden wird und beide geparst werden? Geht das ueberhaubt?
Mir ist klar, dass ich den PHP Quelltext der Navigation einfach im index.php coden koennte, aber das moechte ich vermeiden, damit das ganze noch ein bischen uebersichtlich bleibt.
Uebrigens: Mit require hatte ich das selbe Problem...
Bin um jede Antwort oder Loesungsansatz dankbar!
HI
Hast du schon probiert das erste / wegzunehmen??
welche Fehler-Meldung schreibt er den???
WICHTIG!!
Wenn du include verwendest, ändern sich die Pfade, wenn du sie ohne http:// angibst.
das heißt wenn du in deiner navigation.php einen link setzt (ohne HTTP://) auf eine Datei im zb im selben Ordner.
dann schaut er so aus:
http://domain/navigation/file
wenn du das ganze includierst und sich das File ned im selben Ordner befindet dann schaut es so aus
(aufrufendes File befindest sich zb im ROOT)
http://domain/file
wenn du noch fragen hast, melde dich einfach hier!!
Dominic Suter
07.02.2002, 08:58
Ich bin im Moment nicht direkt vor dem Skript, das liegt zuhause :(
Aber was ich gestern noch probierte was das include mit ohne /, so woe du hier schreibst. Aber das brachte auch nicht das gewünschte Ergebnis.
Als ich im File navigation.php die PHP Tags entfernte, zeigte mit der Browser einfach den ganzen Quelltext des Files in der Tabelle an. Das zeigt mir, dass ich den Verweis eigentlich richtig gesetzt haben sollte, aber nun wurde verständlicher weise das File nicht mehr interpretiert :(
Ich werde heute Abend auf jeden Fall einmal einen dirketen und nicht einen relativen Verweis verwenden, damit dieses Problem ausgeschlossen werden kann. Ich werde mich dann nochmals melden.
Ach ja: Mein Verzeichnis sieht folgendermassen aus:
Die aufrufende Datei heisst index.php, liegt im Root-Verzeichnis. Die aufgerufene Datei (navigation.php) liegt in einem Unterverzeichnis Namens navigation. Dieses Unterverzeichnis liegt ebenfalls im Root-Verzeichnis.
Also:
http://localhost/index.php
und http://localhost/navigation/navigation.php
um es einmal à la explorer auszudrücken. (Mit diesen URL`s könntest du die Files einzeln ausführen.)
Dann sollte mein Verweis eigentlich richtig sein, oder?
Hi @gain
Wie ich aus deinem Post entnehmen konnte, funkt das include doch.
nur am Übersetzten hängst
wenn du willst schau ich es mir mal durch, schicks oder poste es hier einfach.
Dominic Suter
07.02.2002, 13:27
OK. Aber eine orabklährung. Darf ich in ein PHP Skript eine Datei includen, die ebenfalls in PHP Tags steht?
Include bewirkt ja eigentlich dass der Quelltext der Datei an dessen Stelle eingefügt wird. Nun stehen da aber 2 aufeinanderfolgende <?PHP Tags. Das darf aber nicht sein (habe ich ausprobiert, mein debugger reklamiert). Also dachte ich mir, dass ich einfach die Tags in der Datei, die mittels include aufgerufen wird, weg lasse. Da ja eigentlich eh nur der Quelltext so übernommen wird, sollte das ganze Skript dennoch interpretiert werden können, da es noch immer in PHP Tags steht.
Aber das funktioniert leider nicht, denn dann zeigt mir der Browser nur den Inhalt des Files an, dieser wird aber nicht interpretiert.
Desshalb habe ich die Frage: Wie binde ich eine PHP-Datei *.php mittels include in eine andere PHP-Datei ein?
Geht das so, wenn ja, was muss man beachten?
Hi @gain
Die includierte Datei kann natürlich auch PHP enthalten
zeig mir mal den Code für das ganze.
ist glaub ich einfacher!!
Helfe dir gerne
Dominic Suter
07.02.2002, 14:33
OK, werde ich machen. Wird aber noch eine Weile dauern, da ich erst noch nach Hause muss...
Und ein paar Zeilen Code sind das schon...
Schon jetzt mal vielen Dank!
Dominic Suter
07.02.2002, 21:44
OK. Hier erst einmal die Datei index.php:
Muss vieleicht noch sagen, dass ich sehr viele Komentare habe, aber ich werde in Zukunft nicht der einzige sein, der sich mit diesem Skript auseinander setzten muss...
<BODY>
<TABLE BORDER="0" WIDTH="100%">
<TR>
<!-- Row 1 -->
<TD WIDTH=200>
<?PHP
include("/navigation/navigation.inc");
?>
</TD>
<!-- Col 1 -->
<TD>
<?PHP
include ("template.inc");
$t = new Template("templates/","remove"); //Pfad zu den Templates, nicht erkannte Variabeln werden übersprungen
$t->set_file(array("main" => "main.tpl",
"navigation" => "navigation.tpl")); //Hash für die Seitenelemente
$t->set_var(array(
"Title" => "Dies ist der Titel der Page", //Ab hier der eigentliche Inhalt der Page, inkl. HTML
"BodyContend" => "Dies ist der Body Inhalt."
));
$t->parse("out",array("main")); //Parsen der Daten und übergeben an die Variabel "out"
$t->p("out");
?>
</TD>
<!-- Col 2 -->
</TR>
</TABLE>
</BODY>
Und nun navigation.php, die ja included ist:
<?php
$dateiname="titles.txt"; // Navigationsfile einlesen
if(file_exists($dateiname))
{
$datei = fopen($dateiname, "r");
if($datei)
{
while(!feof($datei)) // solange nicht das Ende der Navigation erreicht wurde...
{
$count = 0; // Schleifenzaehler wird initialisiert
$zeile = fgets($datei, 255); // wird eine Zeile eingelesen
$title = explode("|", $zeile); // Die Untertitel generiert
$elem = sizeof ($title); // Die Anzahl der Array Elemente wird uebermittelt
$maintitle = reset($title); // Gibt den ersten Wert des Array aus
echo ("<TABLE CLASS=\"NAVIGATION\" border=\"1\" width=\"100%\">\n"); // bereitet die Tabelle vor
echo ("<TR>\n<TD>$maintitle</TD>\n</TR>\n"); // und stellt diesen in einer Tabelle dar.
echo ("</TABLE>\n"); // Die Tabelle mit dem Hauptitel wird geschlossen
++$count; // Der Schleifenzaehler wird auf 1 gesetzt
if ($elem > 1) // Unnoetige Tabellenausgabe wird verhindert
{
echo ("<TABLE CLASS=\"NAVIGATION\" border=\"1\" width=\"100%\">\n"); //bereitet die Tabelle vor
for ($elem > 1; $count < $elem; ++$count) // Wenn mehr als 1 Titel vorhanden ist wird die Schleife durchlofen, bis alle Titel ausgelesen sind
{
next($title); // Geht im Array um 1 weiter
$subtitle = current($title); // Ordnetr den Untertitel zu
echo ("<TR>\n<TD><A HREF=\"index.php?$subtitle\">$subtitle</A></TD>\n</TR>\n"); // Gibt einen Untertitel aus
}
echo ("</TABLE>\n"); // Beendet die Tabelle
}
}
fclose($datei); // Datei wird wieder geschlossen
}
else // Kann die Datei nicht geoeffnet werden -> Mitteilung an User und automatisches E-Mail
{
echo ("Das Navigationsfile konnte leider nicht gefunden werden. Der Administrator wurde automatisch benachrichtigt");
mail("dominic.suter@gmx.ch","+++ERROR-REPORT+++ NAVIGATION (GRENADIERSCHULE.CH)","Die Navigation konnte nicht geladen werden. Bitte umgehend Debuggen.","");
}
}
?>
Hi
bin das ganze mal durchgeflogen und dabei ist mir was aufgefallen.
Du includierst die navigation.php, diese fragt am Anfang ab ob ein bestimmtes File da ist.
wenn es nicht vorhanden ist, wird nix ausgegeben.
Nun die Frage:
Wo liegt die titles.txt??
Erklärung:
wie schon in meinen ersten Post ändert sich der Pfad wenn du Files includest.
in dem Fall sucht er im Verzeichnis der index.php
Ich traue mich, zu behaupten das dort der Fehler liegt,
aber schaue es mir im laufe des Tages genauer an.
Dominic Suter
08.02.2002, 13:33
Das file titles.txt liegt im selben Verzeichnis wie das File navigation.php, daher benötige ich keine Pfadangabe, oder?
Hi @gain
Eben deswegen braucht es die Papf angeben
da wenn du es includierst (navigation.php) du dich nicht in
/navigation/
sondern in
/
befindest!!
Das ist das was ich vorher beschrieben habe!!
Dominic Suter
08.02.2002, 13:51
Das schon, aber ich habe das noch nicht ganz verstanden. Ich muss also immer den Pfad aus Sicht des Root-Verzeichnisses angeben, auch wenn das File im selben Ordner liegt?
Und warum zeigt mir dann das Skript nicht an, dass es das File nicht gefunden hat, dass sollte es meiner Meinung nach tun...
Hi
Das macht er nicht, da die Abfrage, mit der Meldung das das File fehlt, eine Ebene drunter ist
schau dir deine navigation.php nochmal genau an.
besonders dein erstes IF, und auch wo dieses Endet!!
wenn du nach der letzten } diesen Text einfügst, dann sollte es gehn.
else // Kann die Datei nicht geoeffnet werden -> Mitteilung an User und automatisches E-Mail
{
echo ("Das Navigationsfile konnte leider nicht gefunden werden. Der Administrator wurde automatisch benachrichtigt");
mail("dominic.suter@gmx.ch","+++ERROR-REPORT+++ NAVIGATION (GRENADIERSCHULE.CH)","Die Navigation konnte nicht geladen werden. Bitte umgehend Debuggen.","");
}
;-)
Aus dem Manual:
"Wird eine Datei per include() eingebunden, dann "erbt" der darin enthaltene Code die bis zur Skriptzeile mit der include()-Anweisung definierten Variablen und deren Inhalt. Alle innerhalb der eingebundenen Datei Definitionen von Variablen stehen ab dieser Zeile zur Verfügung. Steht die include()-Anweisung innerhalb einer Funktion, wird der darin stehende Code behandelt, als ob er innerhalb der Funktion stehen würde."
Für dich heisst das:
deine index.php
<BODY>
<TABLE BORDER="0" WIDTH="100%">
<TR>
<!-- Row 1 -->
<TD WIDTH=200>
<?PHP
include("/navigation/navigation.inc");
?> .....
macht sich an dieser stelle die navigation.inc ZUEIGEN.. also ...
technisch gesehn:
steht dann da:
<td width=200>
<? php
$dateiname="titles.txt"; // Navigationsfile einlesen
if(file_exists($dateiname))
{
$datei = fopen($dateiname, "r");
if($datei)
{
while(!feof($datei)) // solange nicht das Ende der Navigation erreicht wurde...
{
bla bla bla *G*
zu beachten ist, das der <?php block aus der naviation.inc nicht mehr da ist:
"Wichtig ist, dass beim include()- oder require()-Befehl vom PHP-Parsing-Modus in den HTML-Modus geschaltet wird und bei Rückkehr in das aufrufende Skript wieder zurück vom HTML- in den PHP-Modus. Deshalb muss jeder PHP-Code innerhalb der eingebundenen Dateien umschlossen werden von gültigen PHP-Start- und Ende-Tags."
Okay.. was genau will ich dir damit sagen:
Achte einfach drauf wie du auf dateien zugreiffst also mit absoluten angaben (was in deinem fall dann wichtig ist) oder mit relativen angaben (was du versucht hast, aber gescheitert ist wie man sieht *G*)
nur mal so aus neugier.. muss denn die navigation.inc im extra subdir /navigation liegen ??
bye
bauchi
Dominic Suter
08.02.2002, 19:27
Vielen Dank Jungs!
Mit eurer Hilfe habe ich es geschafft!
Die Navigation haut nun hin.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.