在cron作业和网站中包含带有子包含的php文件


Including php files with sub includes in cron job and website

我有一个网站,它使用了一堆类,这些类都保存在单独的PHP文件中,其中一些文件还包括其他类文件,如下所示:

require_one($_SERVER['DOCUMENT_ROOT']./../models/database.model.php');

问题是,我想运行一个使用相同类文件集的cron作业,但当我执行子包含类文件的路径时,会中断。

我如何为包含的类文件指定路径,以便它们适用于我的网站和任何cron作业?

cron作业的路径:

$HOME/bin/updatephotos.php

课程路径:

$HOME/型号/。。。。

公共web根路径:

$HOME/www/。。。

您可以使用绝对路径进行求解

require_once(__DIR__ . '/../models/database.model.php');

另一种选择是使用一个小的(丑陋的)破解:你可以在自己的上填充$_SERVER['DOCUMENT_ROOT']

if (empty($_SERVER['DOCUMENT_ROOT'])) {
    $_SERVER['DOCUMENT_ROOT'] = __DIR__ . '/../www';
}

经过进一步研究,我找到了以下解决方案:

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

这适用于我的cron工作和网站。

您的include框架正在使用一个系统变量,而该变量并非用于此用途。它应该声明自己的常量,其他包含文件使用该常量。然后,您可以在一个中心位置声明它,最好是在框架的主要包含点中。