【问题标题】:Including php files with sub includes in cron job and website在 cron 作业和网站中包含带有 sub 的 php 文件
【发布时间】:2012-07-18 02:43:49
【问题描述】:

我有一个网站使用一堆类,这些类都保存在单独的 PHP 文件中,其中一些文件子包含额外的类文件,如下所示:

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

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

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

cron 作业的路径:

$HOME/bin/updatephotos.php

类路径:

$HOME/models/....

公共网络根路径:

$HOME/www/...

【问题讨论】:

  • 你不能只使用绝对路径吗?即/var/models/database.model.php
  • 那么他永远无法将他的代码移动到另一个位置!

标签: php cron require-once


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      您可以使用绝对路径解决

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

      另一种方法是使用一点(丑陋的)hack:您可以自己填充 $_SERVER['DOCUMENT_ROOT']

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

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-28
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        相关资源
        最近更新 更多