2010-12-02 13 views
0

Was zwischenPHP einschließlich Dateien

$_SERVER['DOCUMENT_ROOT']; 

und

dirname(__FILE__); 

I ist der Unterschied frage mich, was ist der Unterschied, weil, wenn ich echo 'ihnen, sind sie denselben Weg zurück. Welche bevorzugst du, sollte ich verwenden und warum?

Danke!

Antwort

3

Beide sind unterschiedliche

_ FILE _

Der vollständige Pfad und Dateinamen der Datei. Wenn es in einem Include verwendet wird, wird der Name der enthaltenen Datei zurückgegeben. Seit PHP 4.0.2 enthält FILE immer einen absoluten Pfad mit aufgelösten Symlinks, während es in älteren Versionen unter bestimmten Umständen einen relativen Pfad enthielt.

Quelle: PHP magic constants

Lassen Sie uns sagte, das Dokument /var/www ist,
und Ihre Index-Seite ist /var/www/index.php

dirname(__FILE__) == $_SERVER['DOCUMENT_ROOT']; 

Aber wenn Sie Drilldown auf Unterordner wie /var/www/posts/index.php

dirname(__FILE__) != $_SERVER['DOCUMENT_ROOT']; 
/var/www/posts != /var/www 

Die Verwendung von $_SERVER['DOCUMENT_ROOT'] ist in diesem Fall besser geeignet.

+0

Danke für die Erklärung Ajreal! – Woppi

2

__FILE__ zeigt immer auf den aktuellen Dateipfad und $_SERVER['DOCUMENT_ROOT'] Punkte in das Dokumentstammpfad ;-)

Ich ziehe es erste, da es mehr semantische ist.

Wenn Sie versuchen, die Werte der Dateien zu vergleichen, die sich nicht in Ihrer Docroot befinden, erhalten Sie andere Werte.

0

Die vorherige ist ein Stammordner für den HTTP-Server (oder VirtualHost) und es ist eine Servereinstellung.

Letzteres ist der Ordner, der die aktuelle Datei enthält.

Die Verwendung basiert vollständig auf Anforderungen meiner Meinung nach.

0

Normalerweise würden Sie $_SERVER['DOCUMENT_ROOT'] verwenden, wenn Sie den Stammordner Ihrer Website von einem beliebigen Ort innerhalb Ihrer Website oder Webanwendung aus referenzieren möchten.

Sie finden mit dirname(__FILE__) handlich, wenn Sie eine Datei enthalten, die dann einige weitere Dateien aus dem gleichen Verzeichnis enthalten musste.Ich verwende in meinem PHP wrapper for the Dribbble API

class Dribbble { 

    function __construct() { 
     require_once(dirname(__FILE__) . '/base.php'); 
     require_once(dirname(__FILE__) . '/shot.php'); 
     require_once(dirname(__FILE__) . '/player.php'); 
    } 
} 

Das bedeutet, dass ich nur meiner Website oder Web-Anwendung dribbble.php von überall in einschließen kann und auch nicht darum kümmern, einschließlich base.php, shot.php und player.php zugleich.

Verwandte Themen