2010-12-02 9 views
0

Quelle est la différence entrefichiers PHP, y compris

$_SERVER['DOCUMENT_ROOT']; 

et

dirname(__FILE__); 

je me demande quelle est la différence parce que quand je « echo », ils sont de retour même chemin. Lequel préférez-vous dois-je utiliser et pourquoi?

Merci!

Répondre

3

Les deux sont différents

_ FICHIER _

Le chemin complet et le nom du fichier. S'il est utilisé dans un include, le nom du fichier inclus est renvoyé. Depuis PHP 4.0.2, FILE contient toujours un chemin absolu avec les liens symboliques résolus alors que dans les versions plus anciennes, il contenait un chemin relatif dans certaines circonstances.

source: PHP magic constants

Soit dit-on, votre document est /var/www,
et votre page d'index est /var/www/index.php

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

Mais si vous drill-down à sous-dossier comme /var/www/posts/index.php

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

L'utilisation de $_SERVER['DOCUMENT_ROOT'] est plus appropriée dans ce cas.

+0

Merci de nous l'expliquer! – Woppi

2

__FILE__ pointe toujours sur le chemin du fichier en cours, et $_SERVER['DOCUMENT_ROOT'] points au document chemin racine ;-)

Je préfère premier, car il est plus sémantique.

Si vous essayez de comparer les valeurs des fichiers, qui ne se trouvent pas dans votre docroot, vous obtiendrez des valeurs différentes.

0

Le premier est un dossier racine pour le serveur HTTP (ou VirtualHost) et il s'agit d'un paramètre de serveur.

Ce dernier est le dossier contenant le fichier actuel.

L'utilisation est entièrement basée sur les exigences de mon opinion.

0

Vous utiliseriez normalement $_SERVER['DOCUMENT_ROOT'] lorsque vous souhaitez référencer le dossier racine de votre site Web à partir de n'importe quel emplacement de votre site Web ou de votre application Web.

Vous trouverez l'utilisation de dirname(__FILE__) pratique si vous incluez un fichier, qui a ensuite besoin d'inclure plus de fichiers du même répertoire.Je l'utilise dans mon 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'); 
    } 
} 

Cela signifie que je peux comprendre dribbble.php de ne importe où dans mon site ou application web et ne pas se soucier, y compris aussi base.php, shot.php et player.php en même temps.

Questions connexes