php require_once включает файлы относительно файла вместо рабочего каталога

У меня есть некоторые проблемы с включением файлов относительно. Проблема не в том, что require_once не может найти файл, а в том, что он МОЖЕТ найти файл там, где его нет. Я разобрал проблему до трех небольших классов.

Итак, это моя структура dir:

public_html/
index.php
commands/
CommandFactory.php
account/
Status.php

index.php:

require_once 'commands/CommandFactory.php';

$factory = new CommandFactory();

CommandFactory.php:

    class CommandFactory{

public function __construct()
{
echo getcwd() . '<br/>'; //xxx\public_html (which is good, this is where index.php is
//require_once 'account/Status.php'; // This works as expected
require_once 'account/Status.php'; // This ALSO works, but it shouldn't

$status = new Status(); // This works, though it shouldn't.
}
}

Я проверил, переместив CommandFactory в другой каталог, который решает проблему. Тем не менее, я не могу понять, почему файл может быть включен. Он не должен содержать Status относительно CommandFactory, он должен быть относительным из index.php. Я добавил текущий рабочий каталог, чтобы увидеть, что идет не так, но я не могу понять это. Кто-нибудь знает, как и почему это работает?

-1

Решение

С сайта php.net:

Файлы включаются на основе заданного пути к файлу или, если он не указан,
указанный include_path. Если файл не найден в
include_path, include наконец проверит собственный вызывающий скрипт
каталог и текущий рабочий каталог до сбоя.
конструкция include выдаст предупреждение, если не сможет найти файл; этот
поведение отличается от require, что приведет к фатальной ошибке

источник

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]