首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cli时未定义PHP常量,但通过apache工作

使用cli时未定义PHP常量,但通过apache工作
EN

Stack Overflow用户
提问于 2020-05-29 14:49:09
回答 1查看 184关注 0票数 0

我有一个场景,如果我通过web请求触发代码,包含的文件中的静态函数将看到我的defined值,但是当通过cron触发的调度触发完全相同的代码时,defined值就不会被视为已定义的。我将代码场景简化为尽可能简单的形式,如下所示:

我在文件中放置了一个error_log(print_r(get_defined_constants(true),true));,并比较了web执行和cron执行之间的结果,唯一不同的是cron侧缺少的常量和cron web端的pcntl扩展名常量。

注意:所有的web请求都需要这个设置文件,没有问题。

注意事项:我有其他计划好的文件,这些文件可以看到定义的值

注意到:我有其他的web文件可以使用这个类和它的功能,没有问题。

确认的:设置文件包括在内

确认了:函数正在被调用

我觉得我错过了一些显而易见或深奥的东西。

代码语言:javascript
复制
//-- settings file
...
define("NEED_THIS_CONST","DOODLYDOO");
...
代码语言:javascript
复制
//-- 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");
    }
  }
}
代码语言:javascript
复制
//-- requested file
...
require_once("settings.php");
include_once("vendor.php");
vendor::dothis();
EN

回答 1

Stack Overflow用户

发布于 2020-05-29 20:01:09

这个问题已经解决了。在某个时候,我已经将设置文件(一个隐藏的文件)复制到我的主目录中以scp它,由于某种原因,这个脚本(不在同一路径上)在从cron触发时使用该设置文件,当我删除该副本(而不是链接)时,cron立即开始使用活动文件。我仍然不知道为什么那个拷贝被用作实际的包含,因为它相对于绝对的代码基根,无论如何都找不到那个文件。我不知道怎么了,影子文件柄?在Linux上?从来没听说过。不过现在起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62088678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档