PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pfadangabe require/include


schrubba
29.12.2009, 14:23:26
Hallo Zusammen,

mir ist da beim Umstellen der Pfade auf dem angehenden Server etwas aufgefallen und möchte nun mal nachfragen, was denn die bessere Variante ist.

folgender Tatbestand:

im Ordner "htdocs" befinden sich nur Scripte, welche für den Benutzer zugänglich sein sollen/müssen. Sämtliche Scripte, welche eingebunden werden, befinden sich oberhalb von htdocs in einem separaten Ordner "inc". Diese Scripte binde ich an entsprechender Stelle mit (z.B.)
require '../inc/function.php';
ein.

In dem Script function.php wird ebenfalls ein Script eingebunden, welches aber mit 2 möglichen Pfadangaben funktioniert:
require '../inc/ag.php'; //oder:
require 'ag.php';

Welche der beiden Einbindungen ist denn nun korrekt oder besser gefragt, welche Variante ist die saubere?


Gruß
schrubba

vt1816
29.12.2009, 14:37:44
Handelt es sich bei Dir bei "../inc/" möglicherweise um den/Deinen include_path?

schrubba
29.12.2009, 14:51:34
Ja, im Ordner web befinden sich die Ordner htdocs und inc, der Ordner htdocs ist der Documentroot des Apache.

Versuche das mal abzubilden:

web
- htdocs
- inc


Gruß
schrubba

cortex
30.12.2009, 09:19:44
Welche der beiden Einbindungen ist denn nun korrekt oder besser gefragt, welche Variante ist die saubere?



das erinnert mich an die unterschiedlichen möglichkeiten zur referenzierung in HTML (http://de.selfhtml.org/html/allgemein/referenzieren.htm).

die erste variante referenziert relativ zum aktuellen webroot. solange die projekt-struktur erhalten bleibt, gibt's keine probleme.

die zweite variante nutzt die settings der php.ini: include_path (http://de.php.net/manual/de/ini.core.php#ini.include-path)

cx

schrubba
30.12.2009, 09:40:43
Hi cortex,

ein include_pfad ist weder in der php.ini gesetzt, noch im OS oder in den Scripten selbst.

Nach einigem Hin & Her tendiere ich ja zur 2. Variante, denn wenn ich mal den inc-Ordner umbenenne etc., brauch ich in den ganzen einzubindenen Scripten nichts ändern, sondern nur die Scripte, die im Webroot liegen.

Dennoch erscheint mir die Sache etwas komisch, denn aus rein logischer Sicht ist zu dem Zeitpunkt des Einbindens der function.php der aktuelle Ordner ja der htdocs-Ordner, also sollte doch php auch von diesem ausgehen bei weiteren Einbindungen, oder?


Gruß
schrubba

cortex
30.12.2009, 09:53:03
hallo schrubba,

ein include_pfad ist weder in der php.ini gesetzt [...]

was sagt get_include_path (http://de.php.net/manual/de/function.get-include-path.php)?


[...] denn aus rein logischer Sicht ist zu dem Zeitpunkt des Einbindens der function.php der aktuelle Ordner ja der htdocs-Ordner, also sollte doch php auch von diesem ausgehen bei weiteren Einbindungen, oder?

der webroot (setting des webservers) hat - soweit ich weiss - erst einmal nichts mit php's include path (php-setting) zu tun.

Dennoch erscheint mir die Sache etwas komisch

genau, darum sollte man der sache auf den grund gehen .-

cx

schrubba
30.12.2009, 10:22:22
get_include_path() gibt ".;C:\php5\pear" aus.

Na nu bin ich erstmal verwirrt, wo kommt das denn her?

Was ich auch noch grad getestet habe:
Ich kann in den Hauptscripten keine Scripte nur mit dem Scriptnamen einbinden, da geht es nur mit "../inc/function.php". Wenn ich aber, wie schon erwähnt, dann aus dieser eingebunden function.php ein weiteres Script einbinde, welches auch im inc-Ordner liegt, geht es mit dem Sciptnamen, aber auch mit "../inc/*.*"

hmm..

cortex
30.12.2009, 10:38:07
sorry, ich kann dir zu dem thema leider auch nicht mehr sagen. da ich persönlich ausschliesslich mit einer bootstrap, klassen und autoloader arbeite, erschlage ich das include- / require-gedöns an einer zentralen stelle...

cx

schrubba
30.12.2009, 11:41:04
Ja kein Thema, vllt finde ich dazu auch noch was und es läuft ja auch problemlos, aber warum das so ist, das lässt mich meistens einfach nicht los.. ;)

Bin grad dabei nach dem ".;C:\php5\pear" zu suchen, es taucht nirgends auf, in keiner möglichen Startoption, ob php, apache oder OS. Bei der reinen Textsuche auf den Platten habe ich es bisher nur in der php5ts.dll ausfindig gemacht..


Gruß
schrubba

DokuLeseHemmung
30.12.2009, 13:10:59
Was suchst du danach?
Wenn es in keiner Konfig steht, dann ist es wohl einkompiliert.
Setze es in der php.ini auf deine Wunschwerte und gut ist.

cortex
30.12.2009, 15:44:02
Setze es in der php.ini auf deine Wunschwerte und gut ist.

das nenne ich pragmatismus (http://de.wikipedia.org/wiki/Pragmatismus) .-p

cx