PHP:如何处理Cron脚本的包含路径?

时间:2018-11-19 16:51:58

标签: php cron include-path

我设置了一个cron脚本,该脚本每分钟在Webhost的CPanel中运行一次。 Cron可以正常运行,但是我遇到与脚本路径相关的问题,我不知道如何正确解决。我的大多数网站都使用/ home / mysite / public_html /作为根路径,但是cron脚本使用/ home / mysite /作为根路径,而没有public_html部分。

这会导致文件包含很多问题,因为我被迫在类加载器中通过检查默认路径和以public_html /开头的替代路径来解决此问题:

spl_autoload_register(function($class){
    $className = str_replace("\\", "/", $class);
    $classPath = "{$className}.php";
    $altClassPath = "public_html/{$classPath}";
    if(file_exists($classPath)) require $classPath;
    elseif(file_exists($altClassPath)) require $altClassPath;
    else throw new ClassNotFoundException("Fatal Error: Class {$class} either does not exist, or has its include path mis-configured!");
});

这让人感到乏味且容易出错,我一点也不喜欢它。有没有更好的方法来解决此问题?我尝试在cron脚本上使用set_include_path,但似乎对自动装带器也无济于事。

1 个答案:

答案 0 :(得分:0)

刚才有同样的问题。看起来很简单,但是通常很难获得,因为每个人都知道这一点,所以没人大声说出来。

在我的案例中,使用PHP的所谓魔术常数解决了它。变量为:

__DIR__

并且它保存了所用脚本的路径。无论是直接运行还是包含在其他php文件中。因此,您可以使用它来编写相对路径,该路径始终从文件所在的位置开始。像这样的人:

 include(__DIR__ . "/../somewhere/something.php");

Some more useful magic constants