Что разница междуPHP включая файлы
$_SERVER['DOCUMENT_ROOT'];
и
dirname(__FILE__);
Интересно, что разница, потому что, когда я эхо "их, они возвращаются тот же путь. Что вы предпочитаете, я должен использовать и почему?
Спасибо!
Что разница междуPHP включая файлы
$_SERVER['DOCUMENT_ROOT'];
и
dirname(__FILE__);
Интересно, что разница, потому что, когда я эхо "их, они возвращаются тот же путь. Что вы предпочитаете, я должен использовать и почему?
Спасибо!
Оба отличаются
_ 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']
является более подходящим.
__FILE__
всегда указывает на текущий путь к файлу, и $_SERVER['DOCUMENT_ROOT']
указывает на документ корневого пути ;-)
Я предпочитаю первый, так как он более семантическим.
Если вы попытаетесь сравнить значения файлов, которые находятся не в вашем docroot, тогда вы получите разные значения.
Первый - это корневая папка для HTTP-сервера (или VirtualHost), и это настройка сервера.
Последний - это папка, содержащая текущий файл.
Использование полностью основано на требованиях, на мой взгляд.
Обычно вы должны использовать $_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
одновременно.
Спасибо, что объяснили это ajreal! – Woppi 2010-12-02 10:13:26