Проблема с автозагрузкой PHP при запуске cronjob - PullRequest
2 голосов
/ 14 апреля 2011

У меня следующая файловая структура:

cron.php /includes/functions.php /classes/ClassName.php

corn.php включает функции. Php вызывает новый ClassName (). И functions.php содержит примитивный автозагрузчик:

 function __autoload($class_name) {
   require_once('classes/'.$class_name.'.php');
 }

, который отлично работает, когда cron.php вызывается из браузера. Однако, если запустить из оболочки, это приводит к фатальной ошибке «Нет такого файла или каталога». Я попытался обернуть 'classes /' .$ class_name. '. Php' в функцию realpath (), но безрезультатно. Пожалуйста, сообщите.

Ответы [ 4 ]

4 голосов
/ 14 апреля 2011

Вы можете использовать dirname(__FILE__), чтобы получить «абсолютный» текущий каталог вашего автозагрузочного скрипта PHP.

Вы можете сделать что-то вроде (предположим, ваш скрипт автозагрузки находится в подкаталоге вашего проекта):

function __autoload($class_name) {
  require_once(dirname(__FILE__).'/../classes/'.$class_name.'.php');
}

См:

2 голосов
/ 14 апреля 2011
 function __autoload($class_name) {
   require_once(dirname(__file__) . '/classes/'.$class_name.'.php');
 }
0 голосов
/ 14 апреля 2011

Поскольку вы используете относительный путь, и каталог PHP, в котором он находится, отличается при вызове из браузера и от CLI.

Используйте эту функцию, чтобы изменить каталог в соответствии с каталогом браузера.

ОБНОВЛЕНИЕ: Предложить код из предложения.

chdir(dirname(__FILENAME__));
0 голосов
/ 14 апреля 2011

как вы запланировали работу?если файл /path/to/cron.php, попробуйте что-то вроде: «cd / path / to && php cron.php», вы, вероятно, делаете что-то вроде «php /path/to/cron.php» сейчас и $PWD не является / path / to / там, поэтому классы не найдены

...