Я никогда не видел ничего подобного.
Структура файла:
- somefolder / base.php
- включает в себя / stuff.php
- включает в себя / constants.php
base.php:
<?php require("../includes/stuff.php"); ?>
stuff.php:
<?php
require("constants.php");
echo "Welcome to stuff.php";
?>
constants.php:
<?php echo "IMPORTANT CONSTANTS DEFINED HERE!"; ?>
Результат:
Добро пожаловать в stuff.php
Почему он не отображает сообщение constant.php ?!Я скажу вам, в чем не проблема: это не код php.
Я начал с некоторых сложных файлов, где файл констант фактически был DEFINE () - некоторые константы и по какой-то причине работали только первые несколько констант.Я закончил тем, что отключил весь посторонний код, включая DEFINE (), и просто получил эхо-операторы, и эта проблема продолжала смотреть мне в глаза.И, кстати, как некоторые из определенных констант могли пройти через, но не через эхо, независимо от порядка кода?
Так что я наконец понял, что это абсурдно, и решил просто создать несколько новых файлов кактестовое задание.Те работали.Или, может быть, они не забыли.В любом случае, у меня был некоторый успех, когда я создавал новые файлы и экспериментировал с их перемещением и копированием кода из одного файла в другой, но вряд ли в этом есть какая-то рифма или причина.
Ничего себе, это только в: Я получил файл constants.php, работающий под другим именем, но когда я изменил его на constants.php, он перестал работать!Я попытался очистить кэш / открыть в другом браузере и перезапустить сервер, но ничего из этого не помогло.Я чувствую, что я или мой компьютер на наркотиках.Gaaaahh !!!
РЕДАКТИРОВАТЬ
Ага.Я пропустил одну очень важную информацию, на которую это похоже.Один файл, который я не упомянул.
- somefolder / constants.php
Этот файл был включен вместо include / constants.php.Вот почему я не получил никаких пропущенных файловых ошибок.Это было совершенно запутанным!Я ожидал, что вложенные включения произойдут до того, как будут включены более высокие уровни, поэтому stuff.php будет искать constants.php в своем собственном каталоге, но я предполагаю, что base.php включает в себя stuff.php, а THEN base.php делает включение, указанное в stuff.php, что означаетВключение относительно base.php.В конце концов, абсолютные пути - это решение.
Дополнительное редактирование:
Очень интересно.Я все еще был озадачен, почему это работало раньше, когда я просто изменил имя include / constants.php (например, на constanza.php).Похоже, что включение файла не так уж и плохо.Если есть два файла с одинаковым именем, он предпочтет тот, который относится к родительскому файлу, выполняющему включение.Но если у него нет выбора, он сделает это по отношению к ребенку.