Aiun Geschrieben 27. September 2006 Teilen Geschrieben 27. September 2006 hi, folgender Fall: - ich habe ein Script für eine Schnittstelle geschrieben (Socketverbindung) - alle kommunikation wird mitgeloggt in Dateien. - einige Standard-blöcke in der Kommunikation sind in templates vorbereitet. Datei / ORdnerstruktur: ./Anwendung.php ./Schnittstelle/ ./Schnittstelle/Schnittstellen_Klasse.php ./Schnittstelle/Test.php ./Schnittstelle/Template_Klasse.php ./Schnittstelle/Templates/ ./Schnittstelle/Templates/Template.tpl die Schnittstelle wird auf zwei Varianten angesteuert: 1.) ich rufe die test.php auf test.php included Schnittstellen_Klasse.php Schnittstellen_Klasse.php included template_Klasse.php Template_Klasse.php liest mit fopen die template.tpl ein die Schnittstelle_Klasse.php schreibt logdateien in den ordner ./schnittstelle/ so weit ok 2.) die Anwendung.php wird aufgerufen Anwendung.php included Schnittstellen_Klasse.php Schnittstellen_Klasse.php included template_Klasse.php Template_Klasse.php liest mit fopen die template.tpl ein -> FEHLER, Pfad nicht korrekt. Ich muss den Ordner /Schnittstelle/ mit in den fopen-Pfad einbeziehen. Seltsam, denn das include von Schnittstelle_Klasse.php nach template_Klasse.php funktioniert auch ohne "require_once('template_klasse.php');" gleicher Fehler tritt beim schreiben der logdateien auf, auch die landen nicht im Unterordner. Frage: kann mir jemand einen Tip / Doku geben wo steht wofür man welchen pfad braucht / wie man das möglichst dynamisch lösen kann ? Frage 2: ich habe in anderen scripten alle includes jeweils relativ zum Hauptordner der Anwendung / Position der aufgerufenen Datei angegeben NICHT relativ zur includenden Datei, ohne Fehler.... von wo aus sucht PHP alles und warum ? lässt sich da irgendwas konfigurieren ? danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 27. September 2006 Teilen Geschrieben 27. September 2006 ist doch klar, include bedeutet nichts anderes als quellcode aus einer datei in eine andere datei zu importieren, also grosse quellcodeteile auszulagern. steht im quellcode hardcoded drin ein relativer pfad, knallt es. logisch oder ? schreib in der Template_Klasse.php den absoluten pfad zur template.tpl und dann wird es gehen. genau so bei den logdateien. dynamisch geht es natürlich auch und zwar über Variablen, die die einzelnen Pfade beschreiben. $PATH="/der/weg/bis/zum/include"; diese packste dann in eine zentrale Datei namens, ENV.php und includierst vorne weg. beim fopen steht dann $PATH."/template.tpl" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 27. September 2006 Autor Teilen Geschrieben 27. September 2006 naja, include funktioniert hier aber mit relativem pfad Datei1 require_once("ordner/datei2"); Datei2 require_once("datei3"); Datei 2 und 3 liegen im gleichen verzeichnis. aber ich habe auch schon mit Datei1 require_once("ordner/datei2"); Datei2 require_once("ordner/datei3"); gearbeitet, und beides funktioniert. Das verwirrt mich ein wenig, daher frage ich. natürlich hast du mit dem festen Pfad auch recht und das ist eine sache die ich auch machen werde...aber mich interessiert trotzdem wie PHP sowas handhabt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 27. September 2006 Teilen Geschrieben 27. September 2006 Frage: kann mir jemand einen Tip / Doku geben wo steht wofür man welchen pfad braucht / wie man das möglichst dynamisch lösen kann ? Frage 2: ich habe in anderen scripten alle includes jeweils relativ zum Hauptordner der Anwendung / Position der aufgerufenen Datei angegeben NICHT relativ zur includenden Datei, ohne Fehler.... von wo aus sucht PHP alles und warum ? lässt sich da irgendwas konfigurieren ? Antwort: PHP geht immer von dem Pfad aus, wo das Skript liegt. Da ein include nichts anderes ist, als ein temporäres Copy/Paste, geht also der erste include ( include("schnittstelle/skript.php"); ) noch, der include in der Datei skript.php hingegen geht dann schief, weil im Hauptorder ja nicht dieselben Dateien wie im Ordner schnittstelle liegen. Denn beim zweiten include wird das ganze ja immernoch vom dem skript aufgerufen, was im Hauptordner liegt. Ein Include kopiert den Quelltext nur an die Stelle wo der Befehl include im Quelltext steht und führt den code dann weiter aus. Da da jetzt aber eine Kopie des "includierten" Skriptes steht, wird natürlich dieser code jetzt ausgeführt. Aber eben vom ersten Skript. Du gehst davon aus, dass ein include das "includierte" Skript ausführt und somit auch der Pfad entsprechend anders ist. Um das ganze "dynamisch" zu machen mit den Pfaden, legst du am besten irgendwo eine Config-Datei ab, die den absoluten Pfad zum Schnittstellenordner enthält. Dieser kann dann ja einfach geändert und angepasst werden und stimmt dennoch bei allen aufrufen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.