Требование файла на уничтожение - PullRequest
4 голосов
/ 02 сентября 2011

У меня есть класс, и я делаю так:

function __destruct() {
    $this->load_file('epicEndingfile.php');
}

И я получаю ошибку: Warning: require(...) [function.require]: failed to open stream: No such file or directory

И когда я делаю то же самое с __construct, это работает.Почему это так?

РЕДАКТИРОВАТЬ: На самом деле мне не нужен файл, но я использую метод для этого.

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

require использует ваш CD (текущий каталог), а не каталог, в который вы положили файл.

Это может измениться в контексте вашего приложения (между созданием и уничтожением), Если вы хотите указать относительные пути к файлам на основе вашего текущего файла, используйте это:

require dirname(__FILE__)."/epicEndingfile.php";

На PHP 5.2 и ниже и

require __DIR__."/epicEndingfile.php";

В PHP 5.3 +

0 голосов
/ 02 сентября 2011

В методе __destruct сначала выполните echo getcwd();, и вы увидите текущий рабочий каталог на этом этапе, уверен, что он был изменен на этом этапе.

Например, если ваш класс определяется какфайл, расположенный в другом каталоге, чем ваш основной скрипт, требование будет относительно файла, определяющего класс.

Хорошей идеей всегда является определение константы, содержащей базовый каталог вашего скрипта.Итак, где-то в первых строках вашего основного php-файла добавьте.

define('rootdir', dirname(__FILE__));
// you can replace dirname(__FILE__) with __DIR__ if it works in you PHP Version.

Затем каждый раз, когда вы делаете включение или запрос файла, который расположен относительно вашего основного файла сценария.

include rootdir. '/requires/include.php';

например.

0 голосов
/ 02 сентября 2011

Вам необходимо рассчитать местоположение файла.Как вы и написали, файл должен существовать в том же каталоге, что и файл, вызывающий функцию.Добавьте полный путь, и он должен работать.

require '/full/path/to/file/epicEndingfile.php';
...