• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

PHP -> Dokument Root global setzen

leicht-debil

Neu angemeldet

Registriert
13 Aug. 2013
Beiträge
57
Ort
Kassel
Hallo Leute... ich habe gerade ein Problem, das ich irgendwie nicht logisch auf den Schirm bekomme.
Nehmen wir einmal an, ich habe auf einem Webserver (Rootverzeichnis) folgende Datei- und Verzeichnisstruktur.

- index.php (Datei)
- php/ (Verzeichnis)
- unterseite/ (Verzeichnis)

Nehmen wir nun einmal an, dass im Verzeichnis "php" eine Datei namens "bind-mich-ein.php" liegt. Dann binde ich das ganze in der "index.php" mit:
[src=php]include 'php/bind-mich-ein.php';[/src]
ein.

Gehen wir nun davon aus, dass sich im Verzeichnis "unterseite" auch eine "index.php" befindet, in die "bind-mich-ein.php" inkludiert werden soll, dann sieht das ganze wie folgt aus:
[src=php]include '../php/bind-mich-ein.php';[/src]

Meine Frage ist nun die, ob es eine Möglichkeit gibt PHP-Dateien unabhängig von Verzeichnisebene einzubinden, sodass ich nicht in jeder Verzeichnisebene die "Include-Zeile" anpassen muss. Ich habe mir schon das MANUAL zu ___file___ und $_SEVER["DOCUMENT_ROOT"] angeschaut. Allerdings lese ich vor allem bei letztgenanntem, dass dies auf alten IIS-Servern nicht funktioniert. Leider ist die Angabe von absoluten Pfaden keine Alternative, da das Projekt auf unterschieldichen Domains und Servern laufen soll. Kann mir jemand helfen oder Tipps geben?

Danke.
 

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
Die Verwendung von $_SERVER['DOCUMENT_ROOT'] hätte noch weitere Nachteile, insbesondere gehst du dann implizit davon aus, dass zwischen URI-Pfad und physischem Dateisystempfad eine direkte Beziehung besteht (dass also z.B. der URI-Pfad /foo/ bei einem Document-Root /path/to/docroot/ dem physischen Pfad /path/to/docroot/foo/ entspricht). Das ist nur dann der Fall, wenn du keinerlei Symlinks, Alias-Direktiven oder Rewrites nutzt. Ausserdem müsste der dein php-Ordner dann immer an einer fixen Stelle relativ zum Document-Root liegen.

Eine dynamische Bestimmung der Verzeichnistiefe ist meines Erachtens im Allgemeinen wenig sinnvoll. Ich sehe grundsätzlich zwei Möglichkeiten, wenn du das php-Verzeichnis nicht duplizieren willst: Entweder, du definierst an zentraler Stelle, z.B. in einer Site-spezifischen Konfigurationsdatei, eine Konstante mit dem Pfad zu deinem PHP-Verzeichnis. Diese müsstest du beim Aufsetzen der Website einmalig ermitteln, entweder manuell, oder über ein Installationsskript. Oder du verwendest (zumindest unter unixoiden Systemen) Symlinks und linkst `php` auf der jeweiligen Verzeichnisebene auf dein globales php-Verzeichnis.
 

leicht-debil

Neu angemeldet

Registriert
13 Aug. 2013
Beiträge
57
Ort
Kassel
  • Thread Starter Thread Starter
  • #3
Besten Dank @Kugelfisch...

Ich frage mich halt gerade, wie es große CMS-Systeme á la Wordpress oder Typo3 handhaben.
Letztlich möchte ich nichts weiter tun, als ein Sammelsurium an PHP-Skripten, die man immer und immer wieder benötigt, auslagern (Klassen, Funktionen, etc.)
Da natürlich zum jetzigen Zeitpunkt noch nicht abzusehen ist, welche Projekte zukünftig ins Haus stehen, suche ich nach einer (möglichst) globalen Lösung. Dass es immer wieder Situationen geben wird, in denen manuell und händisch eingegriffen werden muss - ist klar.
Das ganze ist ja auch bei der Verwendung von "mod_rewrite" so eine Sache:

Ob ich nun die Seite domain.xyz/artikel.php?cat=hosen&sex=male&size=34
oder die Seite domain.xy/item/hosen/maenner/34/

aufrufe, verlangt ggf. immer wieder Pfad-Anpassungen, die echt lästig sind. Ich weiß, ich weiß: Ich jammere hier auf echt hohem Niveau und wirke wahrscheinlich recht faul, aber mir würde es echt eine Menge Zeit ersparen, wenn ich einen simplen Codeblock global und Verzeichnis-übergreifend einbauen könnte.

z.B immer on Top:

[src=php]<?php
session_start() ;
include 'skript_liste_mit_weiteren_includes.php';
?>[/src]

Das gleiche gilt natürlich auch für andere ausgelagerte Ressourcen: CSS, JS

Ich habe vorhin mal mit dem <base>-Tag gespielt... eigentlich nicht schlecht, aber dabei ist dann wieder auf die Verlinkungen zu achten.
[src=html4strict]<base href="./" >[/src]

Nachtrag:

Oder du verwendest (zumindest unter unixoiden Systemen) Symlinks und linkst `php` auf der jeweiligen Verzeichnisebene auf dein globales php-Verzeichnis

kannst Du mir ein kleines Beispiel nennen?
Da ich einfach mal unterstelle, dass 80% aller Webhosting-Pakete, vServer und Server unter Linux laufen, dürfte hier wohl die "Masse" bedient werden.
 
Zuletzt bearbeitet:

keksautomat

Neu angemeldet

Registriert
15 Juli 2013
Beiträge
471
Sagen wir dein Config Ordner (nehme ich einfach mal an) soll so nicht aus dem Web erreichbar sein;

/var/phpordner/ < hier liegen Config-PHP Dateien
/var/www/ < hier alles was im Web erreichbar sein soll

Nun legst du einen Symlink an;

ln -s /var/phpordner/ /var/www/phpordnersymlink

Nun kannst du aus deiner index.php folgendes machen:

[src=php]
require_once("/var/www/phpordnersymlink/irgendeine-datei.php");
[/src]
 

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
Letztlich möchte ich nichts weiter tun, als ein Sammelsurium an PHP-Skripten, die man immer und immer wieder benötigt, auslagern (Klassen, Funktionen, etc.)
Da natürlich zum jetzigen Zeitpunkt noch nicht abzusehen ist, welche Projekte zukünftig ins Haus stehen, suche ich nach einer (möglichst) globalen Lösung. Dass es immer wieder Situationen geben wird, in denen manuell und händisch eingegriffen werden muss - ist klar.
Dann würde sich anbieten, das ausserhalb des Web-Roots zu tun, sofern du die Möglichkeit dazu hast. Wenn nicht der Anspruch besteht, dass die Projekte auf beliebigen Webhostern (Shared-Hosting) laufen müssen, könntest du voraussetzen, dass einmalig pro Server PHPs include_path angepasst wird, um deine Skripte einzuschliessen, dann könntest du sie über include('foo.php'); direkt inkludieren. Alternativ definierst du den Pfad in jedem Projekt an einer zentralen Stelle als Konstante oder arbeitest mit Symlinks, um ohne Anpassungen der PHP-Konfiguration auszukommen.

Auch stellt sich die Frage, der Nutzen, die gemeinsam genutzten PHP-Skripte zu zentralisieren, den Aufwand rechtfertigt. Bedenke, dass du dadurch zwar Änderungen zentral vornehmen kannst, nach jeder Änderung allerdings immer sämtliche(!) Webanwendungen testen musst, da sich potentiell jede Änderung in den gemeinsam genutzten Skripten auf jede Webanwendung auswirken könnte. Das scheint mir zumindest bei weitgehend unabhängigen Webanwendungen nicht unbedingt sinnvoll. Der Speicherplatzgewinn dadurch ist ohnehin vernachlässigbar.

Das ganze ist ja auch bei der Verwendung von "mod_rewrite" so eine Sache:
Ob ich nun die Seite domain.xyz/artikel.php?cat=hosen&sex=male&size=34
oder die Seite domain.xy/item/hosen/maenner/34/
aufrufe, verlangt ggf. immer wieder Pfad-Anpassungen, die echt lästig sind.
An dieser Stelle musst zu klar zwischen serverseitigen Dateisystempfaden (z.B. für PHP-Includes und Dateizugriff) und clientseitigen URI-Pfaden (zum Nachladen externer Ressourcen mit relativen URIs) unterscheiden. Letztere werden durch mod_rewrite beeinflusst, erstere nicht. Bei den URI-Pfaden lässt sich das Problem durch ein base-Element oder durch Verwendung absoluter URI-Pfade allerdings leicht lösen, so wird z.B. `/foo` sowohl mit einem Basis-URI http://example.com/ als auch mit http://example.com/bar/baz immer zu http://example.com/foo expandiert.
 
Oben