PHP作为cronjob运行时的自动加载问题



我有以下文件结构:

cron//显然也包括/类/ClassName.php

corn.php包含functions.php调用new ClassName()。functions.php包含基本的自动加载器:

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

当从浏览器调用cron.php时可以正常工作。然而,如果从shell运行,它会给出"没有这样的文件或目录"致命错误。我试图将'classes/'.$class_name.'.php'包装到realpath()函数中,但无济于事。请建议。

您可以使用dirname(__FILE__)来获取自动加载PHP脚本的"绝对"当前目录。

你可以这样做(假设你的自动加载脚本是在你的项目的子目录):

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

:

  • http://php.net/manual/en/language.constants.predefined.php
  • http://fr.php.net/manual/en/function.dirname.php
 function __autoload($class_name) {
   require_once(dirname(__file__) . '/classes/'.$class_name.'.php');
 }

您是如何安排作业的?如果文件是/path/to/cron.php,试试这样做:"cd/path/to &&php cron.php",你可能会写"php/path/to/cron.php"而$PWD不是/path/to/there所以找不到classes

因为你使用的是相对路径,从浏览器调用和从CLI调用时它所在的PHP目录是不同的。

使用此功能更改目录以匹配浏览器目录。

UPDATE: Suggest code from suggestion.

chdir(dirname(__FILENAME__));

最新更新