Include Problem

  • #1
C

ccp

Guest
Hi ich habe ein Problem beim uncluden, und zwar möchte ich eine navi includen:

<? include ('Site_Designs/linke_navi.php') ?>

ich befinde mich im ordner /Sites/Sport

nun kann die linke navi nicht included werden da php denkt Site_Designs ist im Ordner Sport, dabei befindet sich Site_Design im Anfangsverzeichnis.

Wie kann ich das lösen?

Ich bitte um Hilfe
mfg ccp
 
  • #2
Wie du schon richtig festgestellt hast, befindet sich die linke_navi.php nicht in dem Verzeichnis, in dem sich die PHP-Datei befindet, in die du die linke_navi.php includieren willst. Um im Pfad einen Ordner höher zu gelangen, gibt es die 2 Punkte (..). Also mach mal

include (../../Site_Designs/linke_navi.php);
 
  • #4
Ich persönlich empfehle immer an dieser Stelle mit dem / (ohne Vorangestellte .. ) in die Root deines Verzeichnisses zu springen und von dort den Verzeichnissbaum neu aufzubauen. Das hilft ungemein Fehler zu vermeiden bzw. das Script innerhalb kürzester Zeit zu protieren. Denn wenn du die danach folgende Verzeichniss Struktur NICHT änderst musst du im Normalfall nichts verändern. (Wenn du mit ../ usw. arbeitest zwar im Normalfall auch nicht, aber ich persönlich empfehle eigentlich rein aus der eigene Erfahrung heraus die andere Methode) Hatte früher immer mit ../ gearbeitet (Habe darüber auf jeder Seite meine CSS Dateien eingebunden als ich noch am Anfang bei HTML war), bis ich irgendwann einmal in 500 Seiten die Pfade anpassen musste. Danach habe ich mich dazu entschieden mit der / Variante zu arbeiten da du in diesem Fall in allen 500 Seiten das selbe Suchkriterium hast und somit ganz einfach mit Suchen und Ersetzen über 500 Dateien arbeiten kannst, und das ohne eine andere Pfadangabe zu beschädigen.
 
  • #5
Auch ne Möglichkeit
 
  • #6
Code:
<? include ($_SERVER['DOCUMENT_ROOT'].'/Site_Designs/linke_navi.php') ?>
 
  • #7
VoiD schrieb:
Code:
<? include ($_SERVER['DOCUMENT_ROOT'].'/Site_Designs/linke_navi.php') ?>

*mmmöööööpppp* Ganz schlechte Idee, um genau zu sein sehr schlechte Idee. Dem Irrglauben, mit $_SERVER['DOCUMENT_ROOT'] eine Wunderwaffe in der Hand zu haben ( außer dem / ) um Probleme mit relativen absoluten Pfadangaben zu lösen, bin ich auch sehr lange aufgesessen bis ich mal einen Server Umzug hatte und blöd aus der Wäsche geschaut habe wieso diverse Skripte nicht mehr liefen.
Das Problem mit $_SERVER['DOCUMENT_ROOT'] ist das es das Dateisystem des Webservers wiederspiegelt und nicht das des Systems auf dem der Webserver läuft. Sollte also der Fall eintreten das das Home Verzeichniss des Users außerhalb des Document Root des Webservers liegt (was aus Sicherheits und Recht Gründen OFT gemacht wird) hast du mit $_SERVER['DOCUMENT_ROOT'] ziemlich verloren! Soviel dazu.
 
  • #8
ok, dann erkläre mir mal bitte ausführlicher wie man es richtig macht. Ich hab dein obiges Posting nämlich nicht verstanden.

Was meinst Du mit / ??
 
  • #9
Der / steht immer für die Würzel des Dateisystems. Allerdings hab ich Gandalfs Ausführungen bzgl. der $_SERVER-Variable nicht ganz richtig verstanden. Ich glaube jedoch, dass es einen Unterschied gibt zw. dem ECHTEN Dateisystem auf dem Host auf dem der Server läuft und dem - ich nenns mal - virtuellen Dateisystems DEINES Webspace-Accounts... Da auf einem Host ja viele Webspace-Accounts gelagert sein können...
Mit / (das ist jedenfalls meine Erfahrung) gelangst du zu der Wurzel DEINES Dateisystems.
Beispiel:
Du befindest dich z. B. in ROOT/html und willst in einer dort abgelegten HTML-Datei ein Bild einbinden, dass sich in ROOT/images befindet:
1. Möglichkeit wäre <img src=../images/bild.gif>
2. Möglichkeit wäre <img src=/images/bild.gif>
Die 2. Möglichkeit hat den Vorteil, dass du die HTML-Datei danach an eine x-beliebige Stelle verschieben kannst, und die Verknüpfung zum Bild immernoch gültig ist...

Das geliche gilt für das Includen von PHP-Skripten...

Greetz
M.
 
  • #10
Ok verstanden. Nur bei mir funktioniert das nicht.

Ich hab folgendes Skript im ROOT Verzeichnis (ist allerdings mein WinXP System zu Hause):

Code:
<?php

include(/cgi-bin/myinc.php);

?>
<html>
<head></head>
<body>

<img src=/images/guestbook.bmp>

</body>
</html>

Und obwohl sich myinc.php in ROOT/cgi-bin/ befindet wird es nicht gefunden.

Code:
Warning: main(/cgi-bin/myinc.php): failed to open stream: No such file or directory in W:\web\homepage\web\inctest.php on line 3

Was muss/kann ich tun, damit es trotzdem gefunden wird? Mir persönlich wäre eine Lösung ohne $_SERVER['DOCUMENT_ROOT'] eindeutig lieber.

Gruß
VoiDy
 
  • #11
Hi,

am besten würd es folgender maßen gehn:

Wenn man an die php.ini kommt, den eintrag include_path um den Pfad zu Site_Designs erweitern.

Die selbe Einstellung kann man vielleicht (wenns vom Admin Erlaubt ist) in einer .htaccess Datei machen.
php_value include_path ALTEANGABEN:/PFAD/ZU/Site_Designs
ALTEANGABEN findet man mit ner PHP Datei mit dem Befehl phpinfos(); heraus.

Dann kannst du mit include(linke_navi.php); Die Datei einfach einbinden.
 
  • #12
Michael_B schrieb:
Der / steht immer für die Würzel des Dateisystems. Allerdings hab ich Gandalfs Ausführungen bzgl. der $_SERVER-Variable nicht ganz richtig verstanden. Ich glaube jedoch, dass es einen Unterschied gibt zw. dem ECHTEN Dateisystem auf dem Host auf dem der Server läuft und dem - ich nenns mal - virtuellen Dateisystems DEINES Webspace-Accounts... Da auf einem Host ja viele Webspace-Accounts gelagert sein können...

So ganz falsch hast du mich gar nicht verstanden! Folgendes, der Server auf dem der WEBSERVER läuft hat ja ein Dateisystem, z.B. FAT, FAT32, NTFS, ext oder sowas ähnliches. Je nach Betriebssystem. Der Webserver hat wiederum ein virtuelles Dateisystem das im sogenannten Document Root beginnt. Der Pfad des Document Root kann in der http.conf festgelegt/verändert werden. Aus Sicherheitsgründen legt man aber user Verzeichnisse außerhalb dieses Document Roots ab, denn wenn man unterhalb des Document Roots eine Verwaltung für die User aufbauen würde kriegt man früher oder später nur Probleme. (Z.B. mit den Rechten) Deshalb konfiguriert man den Apache entsprechend um das er auch außerhalb des Doc Roots sehen und Skripte bzw. HTML Daten ausführen kann. Die Variable Document Root bezieht sich aber immer auf das im Webserver eingestellte Wurzelverzeichniss. Es ist der Zeiger der das physische Dateisystem des Servers mit dem Wurzelverzeichniss des virtuellen Dateisystems des Webservers verknüpft.

Beispiel:

Wenn der Apache auf F:\Apache installiert ist und der DocRoot nicht verändert wurde dann wird die Variable DocRoot F:\Apache\htdocs anzeigen. Das bedeutet das ab da das virtuelle Dateisystem beginnt.

Wenn nun aber per Webserver definiert wurde das die Verzeichniss der einzelnen User auf G:\User\bla\ deffiniert sind, und du nun mit der Variable DocRoot arbeitest und versuchst ein Script im Verzeichniss Verzeichnisfürscript\index.php aufzurufen wird er das Script unter F:\Apache\htdocs\Verzeichnisfürscript\index.php suchen und nicht unter G:\User\bla\Verzeichnisfürscript\index.php

Wenn du allerdings das Script nicht per DocRoot Variable aufgerufen hättest sondern per /Verzeichnisfürscript\index.php dann wäre der Webserver in das angegebene HOME Verzeichniss des Users gesprungen und hätte das Script an entsprechender Stelle gefunden.

@void

Poste mal die Ausgabe von phpinfo()

Da liegt wie es mir scheint ein kleiner Konfig Fehler vor. Denn dein Home Verzeichniss scheint schon vorher zu beginnen so das du vermutlich nur vergessen hast die dazwischen liegenden Verzeichnisse anzugeben.
 
  • #13
PCDBjörn schrieb:
Hi,

am besten würd es folgender maßen gehn:

Wenn man an die php.ini kommt, den eintrag include_path um den Pfad zu Site_Designs erweitern.

Die selbe Einstellung kann man vielleicht (wenns vom Admin Erlaubt ist) in einer .htaccess Datei machen.
php_value include_path ALTEANGABEN:/PFAD/ZU/Site_Designs
ALTEANGABEN findet man mit ner PHP Datei mit dem Befehl phpinfos(); heraus.

Dann kannst du mit include(linke_navi.php); Die Datei einfach einbinden.

Ähm mal ehrlich Björn, wer kommt bei einem Webhosting angebot schon an die PHP.INI ran?!?! Ich kenn zumindest keinen Webhosting Anbieter wo das geht.
 
  • #14
Björns Kommentar Ist aber nicht ganz irrelevant, da VoiD ja einen Server auf seinem eigenen Rechner installiert hat...

Greetz und gute n8 (muss morgen um 7.45 im Hörsaal sitzen *kotz*)
M.
 
  • #15
Ähm mal ehrlich Björn, wer kommt bei einem Webhosting angebot schon an die PHP.INI ran?!?! Ich kenn zumindest keinen Webhosting Anbieter wo das geht.

Hi,

Bei nem Normalen Hoster wird man nicht an die php.ini kommen und auch nur selten die Einstellung per .htaccess setzen können, stimmt schon, war halt nur noch nen Vorschlag ;)
Denn ich kenn einige, die auch für eigentlich kleine Seiten, einen Virtuellen-Dedizierten-Server haben oder nen Server für die Eigene Homepage im Keller stehn haben und da kann man das schon machen :)
 
  • #16
PCDBjörn schrieb:
Hi,

Bei nem Normalen Hoster wird man nicht an die php.ini kommen und auch nur selten die Einstellung per .htaccess setzen können, stimmt schon, war halt nur noch nen Vorschlag ;)
Denn ich kenn einige, die auch für eigentlich kleine Seiten, einen Virtuellen-Dedizierten-Server haben oder nen Server für die Eigene Homepage im Keller stehn haben und da kann man das schon machen :)

Klar, in diesem Fall hast du natürlich vollkommen recht, und Void hat ja auch tatsächlich zuhause nen eigenen Testserver. Ich persönlich bevorzuge halt Allgemeingültige Varianten *g* Ich möchte es halt gern jedem recht machen *lach*
 
  • #17
Hey Gandalf... mit deiner Art und Weise verschweigst du aber Informationen ;D

Wünsche ein schönes Wochenende
M.
 
  • #18
Michael_B schrieb:
Hey Gandalf... mit deiner Art und Weise verschweigst du aber Informationen ;D

Wünsche ein schönes Wochenende
M.

Das stimmt so nicht ganz. Ich verschweige keine Informationen, ich erläutere nur die gänigsten und sinnvollsten Methoden. Nach Möglichkeit auch die, die nach Möglichkeit System unabhängig ist. Das andere wäre auch zu viel. Wer sich mit meinen Antworten nicht zufrieden ist ist dazu aufgerufen sich selbst weiter zu bilden und andere Lösungswege zu versuchen. Außerdem, ich weiß ja auch nicht alles ;)

Ein Beispiel. Die Lösung mit $_SERVER['DOCUMENT_ROOT'] hätte ohne weiteres Funktioniert WENN, ja wenn ccp's Hoster (auf diesen Beitrag hat Void schließlich geantwortet) den Doc Root so eingestellt hat das er mit dem HOME Verzeichniss von CCP übereinstimmt. Wenn nicht funzt es nicht. Meine Lösung funzt in jedem Fall. Die Lösung von Björn funzt auch, WENN ja wenn CCP Zugriff auf die PHP.INI hätte. Ich persönlich versuche immer einen Weg zu beschreiten der IMMER funktioniert und Standard konform ist (also nicht auf ein OS oder einen Browser zugeschnitten ist). Das erspart einfach Ärger und Fehlersuche. Ich beschäftige mich eben gerne mit wenn's und abers. Nur in wirklichen Härtefällen weiche ich von dieser Linie ab.

Und so betrachtet verschweige ich kein Wissen oder?!

Dir auch ein schönes WE! :wink:
 
  • #19
Schon klar... war ja auch nur ein Joke ;)

Häf ä neiß wiekänt...
 
  • #20
Michael_B schrieb:
Schon klar... war ja auch nur ein Joke ;)

Häf ä neiß wiekänt...

Jupp, aber andere Leute kriegen das vieleicht in den falschen Hals ;)

So, und jetzt genug Off Topic / In Topic mischmasch produziert *gg*
 
Thema:

Include Problem

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben