Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[PHP] Wie verwaltet PHP Include, fopen unsw. Pfade ?

Empfohlene Antworten

Veröffentlicht

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

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"

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.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.