Pfadangaben in include-Anweisungen

Alles, was PHP betrifft, kann hier besprochen werden.

Pfadangaben in include-Anweisungen

Postby Micha1975 » 23. February 2006 13:14

Hallo,

folgendes Problem: ich lade per include eine Datei formlar.php aus einem Unterordner in eine Datei start.php. Diese Datei enthält ein Formular, das auf sich selbst zeigt, und weitere includes (bsp. zu einer Datei mit Funktionen zum Datenbank-Connect). Der Inhalt der formular.php wird nun so verarbeitet, als wäre er Inhalt der start.php. Führe ich nun das Formular aus, wird formular.php direkt geladen. In diesem Moment ändert sich die relative Position des ausführenden Scripts. Somit stimmen meine relativen includes nicht mehr.
Ich habe nun versucht, absolute Angaben zu verwenden, aber so, dass das Ganze auf andere Maschinen portierbar bleibt, beispielsweise so:
Code: Select all
include "http://$SERVER_NAME/data/connect.php";

Dieser Include funktioniert auch, aber der Geltungsbereich meiner Variablen reicht nicht bis dorthin, ebenso kommen Variablen aus so incluierten Dateien nicht zurück. Ich kann also Variablen nur per Refferer mitschicken bzw. nur print oder echo-Ausgaben zurückbekommen.
Zweiter Ansatz war, das Vorhandensein bestimmter Variablen zu testen, die erst nach Abschicken des Formulars vefügbar sind, und dementsprechend zwei Pfadversionen anzubieten. Das finde ich aber sehr aufwändig.

Ich suche nun nach einer eleganteren Lösung, um knackige Includes zu schreiben, unabhängig vom relativen Standort der aufrufenden Datei und unabhängig vom Server (also nicht ab Serverroot).

Bin für jeden Vorschlag dankbar.

cu Micha
Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt. – Thomas Watson, Vorsitzender von IBM, 1943
Micha1975
 
Posts: 25
Joined: 29. December 2005 15:28

Postby Wiedmann » 23. February 2006 13:31

Code: Select all
include "http://$SERVER_NAME/data/connect.php";

Man macht ja auch keinen Include über HTTP wenn alle Dateien auf einem Server liegen. Eben weil du hier das Problem hast, dass die includierte Datei erst einmal von PHP geparsed wird (und man deren Ergebnis bekommt) und nicht, wie normal, einfach der Code in der aktuellen Datei eingebunden wird und dort mitverarbeitet wird.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Micha1975 » 23. February 2006 13:52

Naja, das ist mir seit ein paar Tagen auch klar. Wie sollte man das den nun am besten lösen. Das von mir beschriebene Konstrukt ist doch eigentlich eher was Simples. Das Problem müssen doch andere auch schon gehabt haben ...

cu Micha
Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt. – Thomas Watson, Vorsitzender von IBM, 1943
Micha1975
 
Posts: 25
Joined: 29. December 2005 15:28

Postby Micha1975 » 23. February 2006 13:59

Vielleicht ist es besser, bei Aufruf von start.php und Bedingung für formular=true diese nicht per include, sondern irgendwie anders einzubinden? Dann ist die aufrufende Datei ja immer dieselbe. Ich kenne dazu aber nur include und require ...

Diese Rufumleitung wäre dann wohl eher in javascript zu schreiben, damit der Client aufruft. Aber ich hab was gegen javascript. Da wo es nicht unbedingt sein muss ...

cu Micha
Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt. – Thomas Watson, Vorsitzender von IBM, 1943
Micha1975
 
Posts: 25
Joined: 29. December 2005 15:28

Postby KingCrunch » 23. February 2006 14:02

Also, mir is bisher niemand bekannt, der es so versucht hat, also wirste eventuell ein stückweit alleine da stehen. Fakt ist, dass du die Datei relativ zum gegenwärtigen Pfad oder absolut zum (persönlichen) root einbinden musst. Gemeint ist dabei das Dateisystem, auf dem sich der Server befindet, gemeint, nicht die Adresse.
Ich würde behaupten, dass für dich
Code: Select all
include "data/connect.php";
richtig ist. In diesem Fall heißt es, dass die Datei, die included, die Datei, die included wird, im Untervezeichnis (von sich selbst) "data" sucht.
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby M3g4Star » 23. February 2006 14:06

Ahhh STOP !

Code: Select all
include("blablabla");


Ist mir gerade so aufgefallen .. ;)

laut PHPManual

oder geht das so ohne die Klammern auch ????
Nur mal so als Frage reingeworfen ???!!
User avatar
M3g4Star
 
Posts: 145
Joined: 25. January 2006 07:46
Location: München

Postby Micha1975 » 23. February 2006 14:10

Hmm, das geht auch ohne ... tested
Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt. – Thomas Watson, Vorsitzender von IBM, 1943
Micha1975
 
Posts: 25
Joined: 29. December 2005 15:28

Postby KingCrunch » 23. February 2006 14:11

Geht auch ohne, soweit ich das Manuel überblicke. Explizit steht dazu zwar nix (wie gesagt: soweit ich das überlicke), aber die Beispiele sind ohne Klammern
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby M3g4Star » 23. February 2006 14:16

jo auch gelesen .. siehe hier *hm* ich machs halt immer mit ;)

:idea:
User avatar
M3g4Star
 
Posts: 145
Joined: 25. January 2006 07:46
Location: München

Postby Micha1975 » 23. February 2006 14:24

Vielleicht sollte man die Frage umformulieren:
Gibt es eine Möglichkeit, sicher den Weg zur (Web)-Wurzel zu definieren, da das Script durch die include-Aufrufe ja an unterschiedlichen Orten in den Unterordnern auftauchen kann?

Micha
Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt. – Thomas Watson, Vorsitzender von IBM, 1943
Micha1975
 
Posts: 25
Joined: 29. December 2005 15:28

Postby M3g4Star » 23. February 2006 14:36

versuchs mal hier

Da müsstest du Informationen genug bekommen.
User avatar
M3g4Star
 
Posts: 145
Joined: 25. January 2006 07:46
Location: München

Postby KingCrunch » 23. February 2006 14:46

Ist nicht die "webwurzel" sowieso immer "/"? :? Meinste damit die "Wurzel", die das Document-root repräsentiert? Ansonsten müsste das ja passen:
$_SERVER
...
'DOCUMENT_ROOT' Das Wurzelverzeichnis des Webservers, unter dem das aktuelle Skript ausgeführt wird, so wie es in der Konfigurationsdatei des Webservers hinterlegt ist.

Ich bevorzuge allerdings eher relative Pfade, da ich so flexibler in meiner Verzeichnisstruktur bin. Da kann ich besser das ganze Teil um beliebige Ebenen hin und herschieben, solange nur die Verzeichnisstruktur gleich bleibt.
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Micha1975 » 23. February 2006 14:54

Kenn ich (noch) nicht. Ich geh gleich mal damit basteln. Danke und Tschüß bis morgen.

cu Micha
Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt. – Thomas Watson, Vorsitzender von IBM, 1943
Micha1975
 
Posts: 25
Joined: 29. December 2005 15:28


Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest