我有一个场景,如果我通过web请求触发代码,包含的文件中的静态函数将看到我的defined值,但是当通过cron触发的调度触发完全相同的代码时,defined值就不会被视为已定义的。我将代码场景简化为尽可能简单的形式,如下所示:
我在文件中放置了一个error_log(print_r(get_defined_constants(true),true));,并比较了web执行和cron执行之间的结果,唯一不同的是cron侧缺少的常量和cron web端的pcntl扩展名常量。
注意:所有的web请求都需要这个设置文件,没有问题。
注意事项:我有其他计划好的文件,这些文件可以看到定义的值
注意到:我有其他的web文件可以使用这个类和它的功能,没有问题。
确认的:设置文件包括在内
确认了:函数正在被调用
我觉得我错过了一些显而易见或深奥的东西。
//-- settings file
...
define("NEED_THIS_CONST","DOODLYDOO");
...//-- class file
class vendor {
public static function dothis() {
error_log("reached the file");
if(!defined("NEED_THIS_CONST")) {
error_log("not defined");
else
error_log("defined");
}
}
}//-- requested file
...
require_once("settings.php");
include_once("vendor.php");
vendor::dothis();发布于 2020-05-29 20:01:09
这个问题已经解决了。在某个时候,我已经将设置文件(一个隐藏的文件)复制到我的主目录中以scp它,由于某种原因,这个脚本(不在同一路径上)在从cron触发时使用该设置文件,当我删除该副本(而不是链接)时,cron立即开始使用活动文件。我仍然不知道为什么那个拷贝被用作实际的包含,因为它相对于绝对的代码基根,无论如何都找不到那个文件。我不知道怎么了,影子文件柄?在Linux上?从来没听说过。不过现在起作用了。
https://stackoverflow.com/questions/62088678
复制相似问题