Darstellungspunkt bei require
ASCII
- php
Moin!!
Da ich am PC etwas schreibfaul bin, will ich versuchen, bei meiner Webseite immer wiederkehrende Elemente wie z. B. die Navigationsleiste von einer Datei über require abzurufen. Da gibt es nur ein Problem.
Hier ein einfaches Test-Script:
Datei index.php:
<html>
<head>
<title>Test-Script</title>
</head>
<body>
<h1>Test</h1>
<?php
require("datei.php");
}
?>
</body>
</html>
datei.php:
<?php
echo "Text";
?>
Der Text von Datei.php wird in index.php eingefügt, aber allerdings ganz oben von der Seite dargestellt:
Text<html>
<head>
<title>Test-Script</title>
</head>
<body>
<h1>Test</h1>
</body>
</html>
Wieso wird der Text nicht da dargestellt wo ich es möchte? Falscher Befehl? Wie kann ich das ändern (möglichst ohne Variablen einsetzen zu müssen)?
Thank You!
ASCII
hi ASCII!
<?php
require("datei.php");
}
was macht diese klammer da?
prost
seth
was macht diese klammer da?
Frage ich mich auch ... hast du vielleicht output buffering irgendwo an? Aber eigentlich sollte das ja auch nicht solche Resultate bringen...
Der Yeti
Hallo ASCII,
dann wäre noch anzumerken, das include() im Fehlerfalle nicht mit einem fatal error weitere Scriptabarbeitungen verhindert.
http://de3.php.net/manual/de/function.include.php
Gruß aus Berlin!
eddi
Das mit dem } war natürlich ein Fehler. Das war in der test-Datei ein "Überbleibsel" von den function-Klammern.
Trotzdem habt ihr meine Frage nicht beantwortet!
ASCII
hi ASCII!
Das mit dem } war natürlich ein Fehler. Das war in der test-Datei ein "Überbleibsel" von den function-Klammern.
nun, dann liegt der fehler evtl. an einem code-fragment, dass du uns vorenthalten hast, denn der von dir gepostete code sollte eigentlich nicht zu dem von dir beschriebenen fehler fuehren.
Trotzdem habt ihr meine Frage nicht beantwortet!
du bist auch nicht auf die gegenfragen eingegangen. tritt mit include() das gleiche problem auf?
lade doch mal den code irgendwo hoch, damit man sich den komplett anschauen kann. (selbstverstaendlich sollte der php-code dann nicht verborgen sein)
prost
seth
Hi ASCII!
beim Umgang mit den Funktionen include() und require() ist es fast schon vorprogrammiert, daß es zu Fehlern kommt. Es ist vielen nicht mal bewußt, die hier ihre Probleme schildern, daß bei Benutzung der beiden Äquivalente nur der gesammte Steuerfluß aller Scripte zu einer Lösung hier, aber auch in allen anderen Foren, führen kann. Da es eine Reihe von "abnormalem" Verhaltensweisen von Ausdrücken in Verbindung mit Inclusionen (Einschlüssen) gibt, die aber bei ermangelnden Problembescheibungen (so wie eben auch Deine) für einen Lösungsansatz nicht einbesogen werden können - somit ist auch kein befriedigendes Ergebnis an Antworten zu erwarten.
Ich weiß nicht wie reif Du bist, jedenfalls scheint Dir die Erkenntnis, daß man aus den Folgereaktionen auf eine gestellte Frage, aber auch darüberhinausgehend auf jede Aktion und deren Reaktion, eigene Fehler ableiten kann, noch bevorzustehen. Newton hat dieses Phänomen als actio - reactio axiom beschrieben. Aber bei genauerer Betrachtung ist dies ein weit über die Physik hinausgehendes Gesetz; es ist eine, wenn nicht sogar die, essentielle Wahrheit.
Ein paar Threads weiter unten habe ich auch schon schreiben müssen, daß ich mir vorkomme wie ein Elementarphysiker, der einen für das Auge leeren Körper mit einem Elektronenstrahl beschießt, um aus den so entstehenden Streumustern Rückschlüsse auf die dennoch enthaltene Materie zu bekommen. Das trifft auch auf mein Gefühl bei Deinem Ausgangsposting zu. Du kannst Dir gerne mal den Spaß machen und Dir in der Suche http://suche.de.selfhtml.org/ die Worten "hellsehen", "Hellseher" und "Glaskugel" im </archiv/> heraussuchen lassen...
Sicher gibt es auch immer wieder Leute, die ihr Statement "kannst Du den Code nicht auf das wesentliche beschränken" sich nicht verkneifen können. Aber ich denke, auch da kann man getrost drüberstehen. Andere immer wieder unterschwellig wahrnehmbare Gründe, daß man ernsthaft dem Irrglaube verfällt, man würde hier ein neuartigen Code preisgeben, den ja sonnst alle nutzen könnten, sind kurz um Schwachsinn.
Also sei so schlau, wenn Du DEIN PROBLEM wirklich gelößt wissen willst, die weiteren Ausführungen Dir nicht weiterhelfen, die einschlägig bekannten Manuals und Tutorials zu Deiner Scriptsprache Dir nicht helfen konnten und poste den gesammten Quellcode aller Scripte leserlich!
Oben genanntes "abnormales" Verhalten hängt mit dem elementaren Verständnis, was dort genau passiert, zusammen. Jeder Code, der einbezogen wird, verhält sich so, als wäre er direkt in diesem Script niedergeschrieben worden. Somit ist die Verwendung von die() oder exit() genau zu überprüfen. Ein einbezogenes Script bricht automatisch auch die gesamte Abarbeitung des einbeziehenden Scriptes ohne Möglichkeit der Wiederkehr ab!
Auf den PHP-Scriptbereich folgedes HTML wird ebenfalls zur Verwunderung einiger nicht mehr ausgegeben!
Oftmals werden Funktionen mit identischem Namen im einbeziehenden Script, als auch im einbezogenen Script definiert. Die Fehlermeldung auf solche Redeklarationen gehört sicher aucht nicht zu den erwünschten Ausgaben.
Das Verwenden von return() in einbezogenen Scripten außerhalb von Funktionen führt ohne Möglichkeit der Wiederkehr zum Abbruch des einbezogenen Scriptes. Die Steuerung wird dabei an das aufrufende Script wieder abgegeben. Es verhindert somit eine möglicherweise erwünschte Ausgabe von HTML.
Auszuführender PHP-Code ist immer mit <?php ?> (oder Äquvalenten) einzuschließen.
Variablen, die vor dem Aufruf eine Scriptes durch include() oder require() definiert wurden, werden durch erneute Definitionen innerhalb des aufgerufenen Scriptes ohne Möglichkeit der Wiederkehr überschrieben.
Sind aufrufendes und aufgerufenes Script nicht im selben Verzeichnis, kann es bei allen Aktionen innerhalb des aufgerufenen Scriptes, die auf relative Pfadangeben aufbauen, zu Problemen kommen. Das aufgerufene Script erbt alle Variablen, also auch die $GLOBAS vom aufrufenden Script. Es nimmt damit die Position bzw. das Arbeitsverzeichnis des aufrufenden Scriptes an.
Gruß aus Berlin!
eddi