wake-up-neo.com

wurzelpfad funktioniert nicht mit PHP-Include

/ am Anfang eines Links, um zum Stammordner zu gelangen, funktioniert in PHP-Include nicht.

zum Beispiel "/example/example.php"

Was ist die Lösung?

40
Per Magnusson

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

  • fügen Sie den Webstammordner dem Include-Pfad und include('example/example.php') hinzu.
  • oder du kannst include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
55
Paul Dixon

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

28
Ian

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.

5
Peter Bailey

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"

3
Gameselop

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
2
David

Für mich hat der folgende Trick funktioniert ... __ Ich verwende Windows mit IIS, DOCROOT ist also C:\Inetpub\wwwroot.

  1. subst. von C:\Inetpub\wwwroot zu einem Laufwerk. Sei es W: (WEB-Inhalt).
 subst W: C:\Inetpub\wwwroot 
  1. bearbeiten Sie die php.ini auf diese Weise: hängen Sie W:\an include_path an, ändern Sie doc_root in W: \.
 include_path = ".; c:\php\active\umfasst; W: \" 
 doc_root = W:\

  1. fügen Sie den Befehl subst in die CMD-Datei im Autostartordner ein, um die Zuordnung automatisch vorzunehmen.

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 

0

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');
    }
0
user1123382