# PHP-include_path einstellen



## ThoRr (28. März 2010)

Hi,

ich habe auf meinem localhost auf Windows ein Problem mit dem include_path. Wenn ich für require einen absoluten Pfad angebe, dann bekomme ich die Fehlermeldung, dass die gewünschte Datei nicht vorhanden sei. Ich habe sowohl versucht, den htdocs-Ordner als auch C:\ als Rootverzeichnis zu nehmen - beides hat nicht funktioniert.

Der include_path sieht in der php.ini folgendermaßen aus:


> include_path='.;C:\php5\pear'



Auf was bezieht sich die erste, auf was die zweite Angabe? Ich hab auch schon danach gegooglet, aber keine Seite konnte mir das Thema anschaulich erklären.

LG


----------



## saftmeister (28. März 2010)

Der Befehl include() sowie require() suchen bei den Datei-Angaben lediglich in den Ordnern, die im include_path angegeben sind.

Beispiel:

include_path = ".;C:/wwwroot/libraries";
Projekt-Pfad = "C:/wwwroot/projekt-include-test"

Es gäbe eine Datei im aktuellen Projekt-Ordner mit dem Namen "testme.php" und eine "C:\wwwroot\libraries\pear\Pear.php"

Folgender Code in index.php im Projekt-Pfad

```
include "./testme.php"; // Funktioniert
include "c:/wwwroot/projekt-include-test/testme.php";  // Funktioniert nicht obwohl es augenscheinlich der gleiche Pfad ist!

include "pear/Pear.php"; // Funktioniert
```

Fazit:
PHP hängt also immer beim Suchen der Include-Dateien die Pfade aus dem Include-Pfad vorn an.

Wenn du den Include-Pfad projekt-spezifisch erweitern willst, kannst du das mit set_include_path() tun:


```
set_include_path(
  get_include_path() . 
  DIRECTORY_SEPARATOR . "C:/someother/directory/where/are/phpclasses/located" .
  DIRECTORY_SEPARATOR . "./und/noch/nen/relativen/Pfad"
);
```


----------



## ThoRr (28. März 2010)

Danke für deine Antwort!

Durchläuft PHP alle Pfade, die unter include_path angegeben sind und sucht nach der Datei? Ich hab als zweiten Pfad nun c:\Server (mein htdocs-Ordner) angegeben, allerdings kann _/webseite_zeitung/acp/includes/functions.inc.php_ von der Datei _C:\Server\webseite_zeitung\acp\index.php_ aus immer noch nicht gefunden werden, obwohl _C:\Server\webseite_zeitung\acp\includes\functions.inc.php_ definitiv existiert.


----------



## saftmeister (28. März 2010)

Wenn dein Code so aussieht, sollte es gehen:


```
include "webseite_zeitung/acp/includes/functions.inc.php";
```

Du hast bei dir aber nen Slash davor. Das brauchst du nicht, das macht PHP von sich aus. Für dich sind die Include-Dateien immer in einem relativen Pfad, solange sie in einem von den in include_path angegeben Verzeichnissen liegt.


----------



## ThoRr (28. März 2010)

Super, die include-Befehle funktionieren nun. Ich habe für include-Pfade nun eine eigene Variable angelegt, in der mittels substr() der Slash aus dem Rootpath herausgefiltert wird. Obwohl ich dadurch allerdings an der Konstante ROOT_PATH nichts ändern musste, funktioniert nun fopen() nicht mehr. Werden die Dateifunktionen ebenfalls durch include_path beeinflusst?


----------



## ThoRr (28. März 2010)

Fehler gefunden - fopen() sieht C:\ als Stammverzeichnis an, keine Ahnung, warum es vorher funktioniert hat. Allerdings ärgert mich das, denn nun muss wohl zwei Konstanten getrennt für includes und fopens anlegen. Oder gibt es einen Weg, das anzugleichen? Meine Idee ist, wie du im ersten Post vorgeschlagen hast, den include_path für die Laufzeit der Skripte so zu setzen, dass ich auch für includes absolute Pfadangaben verwenden kann, die vom ROOT_PATH ausgehen. Geht das so überhaupt oder gibt es einen besseren Weg?


----------



## bofh1337 (29. März 2010)

Include/Require(once) über das httpdocs/www-Verzeichnis hinweg ist nicht statthaft (da kannst du eigentlich auch froh drüber sein).
Das was du vermutlich bräuchtest, wäre "allow_url_include", *das solltest du aber unter keinen Umständen einschalten, weil es wohl ein gewaltiges Sicherheitsloch für den kompletten Server bedeutet.* und auch Programmiertechnisch eher fragwürdig/laienhaft ist.


----------

