【问题标题】:PHP basename( __DIR__ ) is returning _DIR_ on some serversPHP basename( __DIR__ ) 在某些服务器上返回 _DIR_
【发布时间】:2013-08-14 06:18:03
【问题描述】:

我希望这里有人知道这个问题的答案。我写了一个使用

的脚本

basename( __DIR__ )

然后使用 if 文件存在函数。

在我的服务器上这工作正常,但在其他服务器上它实际上返回单词_DIR_ 而不是文件路径。

此更改是否与 PHP 版本有关,或者是否有其他设置使其无法正常工作?

最后有没有更好的方法来获取文件的路径?这是我正在使用的整行:

define('NIFTY_CONSTANT', trailingslashit (WP_PLUGIN_DIR . '/'. basename( __DIR__ ) ). '/lib/mdetect.php' );

(是的,我知道这是一个 WordPress 函数,但这不是一个 WordPress 问题,而是一个 PHP 问题)

【问题讨论】:

标签: php filepath dir


【解决方案1】:

__DIR__ 在 PHP 5.3 中引入。仔细检查您的 PHP 版本。

参考:http://php.net/manual/en/language.constants.predefined.php

【讨论】:

    【解决方案2】:

    如果 __DIR__ 常量在服务器 A 上不起作用,而在服务器 B 上起作用,则 PHP 版本是一个问题(如 @Shivan 所述)。

    您只需在两台服务器上调用phpinfo() 即可对其进行测试。

    这里有一个快速解决方法:

    // this should be at the top
    if (!defined('__DIR__')) {
       define('__DIR__', dirname(__FILE__));
    }
    

    【讨论】:

    • 这当然定义了一个全局 __DIR__ 常量,对于每个文件都是相同的;这与魔术常数 __DIR__ 不同。
    • 如果“解决方法”破坏了您的脚本有什么好处? (如果您在多个文件/目录中使用__DIR__,这破坏某事。)
    • @Bandon 如果您需要兼容低于 5.3 的 PHP 版本,只需使用 dirname(__FILE__) 而不是 __DIR__
    • 这与魔术常量__DIR__ then 不同,每次都不同,具体取决于它的使用位置。使用“解决方法”时,脚本的行为会因它是在 5.2- 还是 5.3+ 上运行而有很大不同。 __DIR__ BTW 根本不是“全局状态”(也许这就是你所缺少的),它实际上只是一个解析器令牌,它被正在解析的文件的当前目录替换。如果你愿意,它是一种反射机制,而不是全局状态。
    • 是的,dirname(__FILE__) === __DIR__,但你错过了一点。如果你在整个脚本中使用__DIR__,那么你的架构就坏了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2017-11-20
    • 2011-06-05
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多