【问题标题】:Xdebug weird __DIR__ constantXdebug 奇怪的 __DIR__ 常量
【发布时间】:2014-02-10 20:12:59
【问题描述】:

我正在编写一个加载 YAML 文件的 PHP CLI 应用程序。在 Xdebug 会话中尝试执行此操作时:

if (file_exists(__DIR__ . '/../../foo/bar')
{
    /* ... */
}

__DIR__ 始终是 xdebug:,这将始终从 file_exists() 指向 false

有什么解决办法吗?

【问题讨论】:

  • 你不是通过eval()运行代码吗?
  • @Spudley 不,我只是“正常”执行代码。当我不使用 xDebug 时,它就像一个魅力。但是一个不可调试的应用程序并不是那么好:(
  • 嗯。如果您通过 eval 运行,答案将是每个 the answer here(由 xDebug 的作者发布)。它确实听起来像同样的问题。
  • 如果你这样做$dir = __DIR__; if (file_exists($dir . '/../../foo/bar')...会发生什么?
  • 你发现了吗?

标签: php xdebug magic-constants


【解决方案1】:

设置$dir = __DIR__; 并使用if (file_exists($dir . '/../../foo/bar')。它会像那样工作。

【讨论】:

  • 在哪里你设置$dir = __DIR__?这在 xDebug 3 中仍然正确吗?
【解决方案2】:

问题是您的调试器向您显示了一个错误的值,因为 DIR 已经在您的脚本中被解析器替换了。

完整的解释可以在这里找到:

How can i get the PHP magic constant __FILE__ work with Eclipse and PDT

您得到的输出不正确。 FILE 是一个特殊的常量 在解析器时进行评估。

【讨论】:

    【解决方案3】:

    作为替代方法,将您的 __DIR__ 常量替换为 dirname(__FILE__) 函数

    if (file_exists(dirname(__FILE__) . '/../../foo/bar')
    {
        /* ... */
    }
    

    【讨论】:

    • 这不起作用,__FILE__ 返回xdebug://debug-eval,不是正确的文件。
    猜你喜欢
    • 2021-12-27
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多