Подтвердить что ты не робот

Что лучше требовать (dirname (__ FILE __). '/'. 'MyParent.php'), чем просто требуется ('myParent.php')?

Множество известных скриптов PHP, включая WordPress, используют dirname(__FILE__).'/myParent.php' вместо 'myParent.php' при включении файлов в тот же каталог текущего script.

Разве они не то же самое? Почему вы предпочитаете печатать больше?

Спасибо.

4b9b3361

Ответ 1

PHP должен знать абсолютный путь к файлу. dirname(__FILE__).'/myParent.php' уже является абсолютным путем, но 'myParent.php' требует поиска с использованием заданных путей в include_path, чтобы получить абсолютный путь и найти файл. Лучшим выбором будет './myParent.php':

Однако более эффективно явно использовать include './file', чем PHP всегда проверяет текущий каталог для каждого include.

Ответ 2

Помимо увеличения производительности (что, вероятно, является предварительной оптимизацией в большинстве случаев *), оно также защищает от (очень странного) сценария, в котором у конфигурации PHP среды нет текущего каталога (.) как часть путь включения.

* Контрольный параметр include с использованием пути, требующего поиска include_path в сравнении с относительным путем, который этого не делает. Протестировано более 100000 итераций каждый

Результаты

include("include.php"):   8.3664200305939s
include("./include.php"): 8.3511519432068s

(8.3664200305939 - 8.3511519432068) / 100000 = 0.000000152680874s

Если вы не включаете сотни или тысячи файлов, 0.0000001s в лучшем случае ничтожно.

Тестовый код

define("MAX", 100000);

ob_start();
$i = MAX;
$_t = microtime(true);
do {
    include("include.php");
} while ( --$i );
$_t = microtime(true) - $_t;
ob_end_clean();

echo "include(\"include.php\"):  {$_t}s\n";

ob_start();
$i = MAX;
$_t = microtime(true);
do {
    include("./include.php");
} while ( --$i );
$_t = microtime(true) - $_t;
ob_end_clean();

Тест проводился на Macbook 10.5.8 с частотой 2.16 ГГц с PHP версии 5.2.9 (www.entropy.ch Release 7)

Ответ 3

Использование dirname + имя файла немного быстрее, потому что PHP не будет перебирать через include_path поиск файла. Если скорость имеет значение, вы, скорее всего, напечатаете больше.

Ответ 4

Добавлена ​​заметка о include ('./file.php').

Если имеет значение только скорость, тогда да, вы можете использовать include ('./file.php'), но если вы хотите разрешать проблемы с зависимостями и относительными путями, вам лучше использовать dirname (__ FILE __), потому что

include('./file.php')

будет по-прежнему строить пути относительно исполняемого script ( включая script), а

include(dirname(__FILE__).'/file.php');

будет разрешать пути относительно текущего script, где находится эта строка ( включен script).

Как правило, вам лучше использовать dirname (__ FILE __), так как "./" дает незначительное увеличение производительности, тогда как dirname (__ FILE __) дает вам гораздо более надежную версию.

/EDIT: Также обратите внимание, что приведенный выше тест относится только к include('./something.php'), который действительно быстрее, чем include('something.php'), потому что у вас нет хоста include_path, но когда вы используете dirname(__FILE__), вы получаете dirname() функция, которая делает ее медленнее, чем хождение по пути include_path (если у вас нет много путей в include_path).