2010-12-02 3 views
0

Что разница междуPHP включая файлы

$_SERVER['DOCUMENT_ROOT']; 

и

dirname(__FILE__); 

Интересно, что разница, потому что, когда я эхо "их, они возвращаются тот же путь. Что вы предпочитаете, я должен использовать и почему?

Спасибо!

ответ

3

Оба отличаются

_ FILE _

Полный путь и имя файла. Если используется внутри include, возвращается имя включенного файла. Поскольку PHP 4.0.2, FILE всегда содержит абсолютный путь с символическими ссылками, тогда как в более старых версиях он содержал относительный путь при некоторых обстоятельствах.

Источник: PHP magic constants

Давайте сказал, ваш документ /var/www,
и ваша страница индекса /var/www/index.php

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

Но если вы просверлите вниз к подпапке как /var/www/posts/index.php

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

В этом случае использование $_SERVER['DOCUMENT_ROOT'] является более подходящим.

+0

Спасибо, что объяснили это ajreal! – Woppi 2010-12-02 10:13:26

2

__FILE__ всегда указывает на текущий путь к файлу, и $_SERVER['DOCUMENT_ROOT'] указывает на документ корневого пути ;-)

Я предпочитаю первый, так как он более семантическим.

Если вы попытаетесь сравнить значения файлов, которые находятся не в вашем docroot, тогда вы получите разные значения.

0

Первый - это корневая папка для HTTP-сервера (или VirtualHost), и это настройка сервера.

Последний - это папка, содержащая текущий файл.

Использование полностью основано на требованиях, на мой взгляд.

0

Обычно вы должны использовать $_SERVER['DOCUMENT_ROOT'], если хотите связать корневую папку своего веб-сайта с любым местом вашего веб-сайта или веб-приложения.

Вы можете использовать dirname(__FILE__), если у вас есть файл, который затем должен содержать еще несколько файлов из того же каталога.Я использую это в моем 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'); 
    } 
} 

Это означает, что я могу просто включить dribbble.php из любой точки на моем веб-сайте или веб-приложения, а не беспокоиться о том же числе base.php, shot.php, и player.php одновременно.