В двух словах: include() отказывается подключать файлы, находящиеся ниже по дереву файлов, через относительный путь. Аналогично: require() и т.п.
При этом, если относительный путь правильный, не ругается.
Но у меня получилось еще забавнее.
И так, подробно.
Скажем, такая вот структура файлов:
dir1/file1.php
dir1/dir2/file2a.php
dir1/dir2/file2b.php
dir1/dir2/dir3/file3.php
Вызывают они друг груга в такой последовательности:
file1 -> file2a -> file3 -> file2b
Примерный код:
<?php
require_once('dir2/file2a.php');
?>
<?php
require_once('dir3/file3.php');
$b = new bbb();
$b->b1();
?>
<?php
class aaa
{
function a1() ....
function a2() ....
function a3() ....
}
?>
<?php
class bbb
{
function b1()
{
require_once('../dir2/file2b.php');
$a = new aaa();
$a->a1();
$a->a2();
$a->a3();
}
}
?>
В dir3/file3.php ругается на вызов a1() и a2() - undefined function.
Если две эти строки закоментировать, то на a3() уже не ругается.
Вставка отладочной печати в dir2/file2b.php не помогает - не выводит ничего. Вставлял в конструктор, просто в тело класса и перед классом.
Провел проверки в dir3/file3.php:
- перед new проверил наличие класса
- после new проверил наличие объекта заданного класса, НО, метод a1() не определен!
Вылечил указанием абсолютного пути при загрузке dir2/file2b.php.
Вот такая вот хрень.
Кто с таким сталкивался? В чем причина?