/ am Anfang eines Links, um zum Stammordner zu gelangen, funktioniert in PHP-Include nicht.
zum Beispiel "/example/example.php"
Was ist die Lösung?
Ich gehe davon aus, dass Sie mit dem Root-Ordner Ihr Webdokument-Root und nicht das Dateisystem-Root bezeichnen.
Zu diesem Zweck können Sie entweder
include('example/example.php')
hinzu.include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
Ich hatte auch dieses Problem. Die Antwort von Paul Dixon ist richtig, aber vielleicht hilft Ihnen das, zu verstehen, warum:
Das Problem hierbei ist, dass PHP eine serverseitige Sprache ist. Wo reine HTML-Dokumente auf Dateien zugreifen können, die auf der Root-URL basieren, die Sie auf dem Server eingerichtet haben (dh, um auf ein Bild von einem beliebigen Unterordner aus zuzugreifen, würden Sie /images/example.jpg
verwenden, um vom obersten Verzeichnis nach unten zu gelangen), PHP greift tatsächlich auf das Server-Root zu, wenn Sie include (/images/example.jpg)
verwenden
Die von Ihnen eingerichtete Site-Struktur liegt tatsächlich in einem Dateisystem im Apache Server. Mein Site-Root sieht in etwa so aus, beginnend mit dem Server-Root und abwärts:
/home2/siteuserftp/public_html/test/
"test" steht für das Stammverzeichnis Ihrer Site
Um Ihre Frage zu beantworten, warum Ihr PHP - Include nicht das gewünschte Ergebnis liefert (es funktioniert genau so, wie es sollte), weil Sie den PHP - Code zum Ausprobieren Ihrer Datei anfragen das Server-Root, wenn es sich tatsächlich im HTML-Root Ihrer Site befindet, was ungefähr so aussehen würde.
Ihre Datei würde auf dem Site-Stamm von "test /" basieren und ungefähr so aussehen:
/home2/siteuserftp/public_html/test/about/index.php
Die Antwort von Paul Dixon lieferte:
include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
ist genau das, was Ihr Problem lösen wird (machen Sie sich keine Sorgen darüber, dass Sie das Dokumentstammverzeichnis suchen, um 'DOCUMENT_ROOT' zu ersetzen; PHP erledigt das für Sie. Stellen Sie sicher, dass 'DOCUMENT_ROOT' buchstäblich vorhanden ist.)
EDIT:
Weitere Informationen zu DOCUMENT_ROOT und anderen PHP SERVER-Variablen finden Sie hier
include () (und viele andere Funktionen wie requir (), fopen () usw.) funktionieren alle im lokalen Dateisystem, nicht im Web-Root.
Also, wenn du so etwas machst
include( "/example/example.php" );
Sie versuchen, von der Wurzel Ihres * nix-Computers aus aufzunehmen.
Und obwohl es eine Vielzahl von Möglichkeiten gibt, um an Ihre Arbeitsweise heranzugehen, sind die Vorschläge von Paul Dixon wahrscheinlich Ihre besten Wetten.
Jeder Webserver verfügt über einen public_html
-Ordner, in dem Sie normalerweise Ihre Dateien aufbewahren usw. Durch die Verwendung von /
gelangen Sie nicht zu public_html
, sondern Sie gelangen direkt zum (nicht zugänglichen) Root-Stammverzeichnis. Verwenden Sie also stattdessen $_SERVER['DOCUMENT_ROOT']."/your/locati.on"
Ich habe dies auf einem Computer mit Windows und IIS mit folgendem Problem gelöst:
<?php
$docroot = 'http://www.example.com/';
include ($docroot.'inc-header.php');
?>
Wenn Sie sich auf einem lokalen Entwicklungscomputer befinden, können Sie erzwingen, dass Ihre Domäne auf localhost verweist, indem Sie Folgendes in C:\Windows\System32\drivers\etc\hosts hinzufügen
127.0.0.1 www.example.com
Außerdem müssen Sie allow_url_include wie folgt in php.ini aktivieren
allow_url_include = On
Für mich hat der folgende Trick funktioniert ... __ Ich verwende Windows mit IIS, DOCROOT ist also C:\Inetpub\wwwroot.
subst W: C:\Inetpub\wwwroot
include_path = ".; c:\php\active\umfasst; W: \" doc_root = W:\
Nun sind beide Versionen erlaubt:
Include "/common/common.inc"; // Zugriff auf zugeordnetes W: root umfassen 'common/common.inc'; // Zugriff auf W: innerhalb von include_path
einige Versionen von PHP haben möglicherweise das Trennzeichen am Ende der Dokumentwurzel, andere jedoch nicht. Aus praktischen Gründen möchten Sie vielleicht Folgendes verwenden:
$r = trim(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT', FILTER_SANITIZE_STRING));
if (substr($r, 0, 1) == '/')
{
define("PATCH_SEPARATOR", "/");
}
else
{
define("PATCH_SEPARATOR", "\\");
}
if (substr($r, -1) == PATCH_SEPARATOR)
{
include_once ($r . 'example/example.php');
}
else
{
include_once ($r . PATCH_SEPARATOR . 'example/example.php');
}