it-swarm.com.de

Wie formatiere ich eine PHP include () absoluter (anstatt relativer) Pfad?

Auf verschiedenen Seiten meiner PHP Website und in verschiedenen verschachtelten Verzeichnissen möchte ich eine bestimmte Datei in einem Pfad relativ zum Stammverzeichnis einfügen.

Welchen einzelnen Befehl kann ich auf diesen beiden Seiten einfügen ...

http://www.example.com/pageone.php
http://www.example.com/somedirectory/pagetwo.php

... um diese Seite einzuschließen:

http://www.example.com/includes/analytics.php

Das funktioniert nicht:

<?php include('/includes/analytics.php'); ?>

Ist es wichtig, dass dies in IIS unter Windows gehostet wird?

22
Zack Peterson

Wenn Sie include () oder requir () (oder die * _once-Versionen) einen absoluten Pfadnamen angeben, wird diese Datei eingeschlossen. Ein absoluter Pfadname beginnt mit einem "/" unter Unix und mit einem Laufwerksbuchstaben und einem Doppelpunkt unter Windows.

Wenn Sie einen relativen Pfad (einen anderen Pfad) angeben, durchsucht PHP die Verzeichnisse im Konfigurationswert "include_path" der Reihe nach, bis eine Übereinstimmung gefunden wird oder keine weiteren zu durchsuchenden Verzeichnisse vorhanden sind.

Um also einen absoluten Dateinamen anzugeben, geben Sie einen absoluten Dateinamen an. Siehe auch die Funktion realpath () .

Wenn du dein eigenes Include "root" setzen willst, schau nach diese Frage (speziell meine Antwort natürlich :-)

5
gnud

Sie können einfach include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php"; verwenden.

24
J Cooper

Aus der Sicht von PHP root ist der oberste Teil des Dateisystems auf dem Webserver, nicht der root aus der Sicht des Webbrowsers.

Die meisten Leute machen eine der folgenden Möglichkeiten.

Definieren Sie eine Konstante in einer globalen Konfigurationsdatei, und verwenden Sie diese bei jedem Aufruf, um/include zu erfordern.

Oder sie verwenden Code wie diesen.

require_once realpath(dirname(__FILE__).'/config.php');
require_once realpath(dirname(__FILE__).'/lib/Database.php');

Die Verwendung der Umgebungsvariablen kann in einigen Fällen gefährlich sein und die Quelle von Sicherheitsproblemen sein.

9
Zoredache

Wie @Stefan Mai sagt, hat PHP keinen "root" -Pfad, aber Sie können einen ganz einfach definieren - die meisten Sites haben eine Seite, die jedes Mal eingebunden wird (zB Konfigurationsdatei), zu der Sie hinzufügen können :

define('ROOT', dirname(__FILE__));

Verwenden Sie dann include ROOT. "/includes/analytics.php";

Sehr nützlich ist auch die Direktive auto_prepend, die Sie in .htaccess für Apache verwenden können. Sie ist nicht sicher, ob sie auf IIS eingerichtet werden soll (obwohl Sie in PHPeine globale Anweisung haben können. _ ini).

8
Greg

Ich kombinierte die obigen Vorschläge und kam dazu.

In meiner config.php-Datei definiere ich ROOT als:

define('ROOT', $_SERVER['DOCUMENT_ROOT']);

Dann verwende ich es in meinen erfolgreichen Dateien:

include_once(ROOT."/someFile.php");

include_once(ROOT."/includes/someFile.php");

4
Reggie Z. Banal

Das funktioniert.

<?php include('c:/inetpub/example.com/includes/analytics.php'); ?>

Ich muss den c:/inetpub/example.com/-Teil zu einer Art globaler Variable machen, damit er von Server zu Server tragbar ist.

1
Zack Peterson

Verwenden Sie .., um ein Verzeichnis aufzurufen. Also in pageone.php

include 'includes/analytics.php';

in pagetwo.php

include '../includes/analytics.php';

Soweit ich weiß, gibt es keine Vorstellung von "root", wie Sie in PHP verweisen, obwohl Sie es definieren könnten, wenn Sie dies wollten. Viel Glück!

1
Stefan Mai

Die Tilde wird von der Shell als Sonderzeichen interpretiert, sodass die Verwendung in PHP-Code unabhängig vom Betriebssystem nicht funktioniert.

Wenn Sie versuchen, auf etwas relativ zu einem Benutzerverzeichnis zuzugreifen, können Sie getenv() versuchen. - Ich bin ziemlich sicher, dass Windows eine Umgebungsvariable setzt, die $HOME entspricht.

0
user42092

Ich fand es so:

<?php include $_SERVER['DOCUMENT_ROOT'].'\\Your\\Site\\Path.php' ?>

Das \\ ist notwendig, wenn Sie ein Sonderzeichen haben, das mit Escapezeichen versehen werden könnte (d. H.\N), so dass \\\in der Zeichenfolge steht.

Da Sie sich in Windows befinden, müssen Sie\anstelle von/verwenden.

0
Santiago