何时在 PHP 代码中使用DIRECTORY_SEPARATOR?

2022-08-30 13:40:00
require_once dirname(__FILE__).DIRECTORY_SEPARATOR . './../../../wp-config.php';
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'inc/options.php';

上面的代码来自Wordpress的插件。我不明白为什么一半使用,但另一半使用?DIRECTORY_SEPARATOR"/"


答案 1

因为在不同的操作系统中有不同的目录分隔符。在Windows中,它在Linux中是. 与该 OS 目录分隔符一起为常量。每次在路径中使用它。\/DIRECTORY_SEPARATOR

在您的代码片段中,我们清楚地看到不良的实践代码。如果框架/cms被广泛使用,并不意味着它使用的是最佳实践代码。


答案 2

所有 PHP IO 函数都会在内部将斜杠转换为适当的字符,因此使用哪种方法并不是什么大问题。以下是一些需要考虑的事项。

  • 当您打印出文件路径并且混合使用和时,它可能看起来很丑陋和令人困惑。如果使用,这永远不会发生\/DIRECTORY_SEPARATOR

  • 使用诸如 之类的东西对于文件IO来说一切都很顺利,但是如果开发人员在不知不觉中在URL中引用了它,例如,则刚刚创建了一个错误。你抓到了吗?虽然这将在 Windows 上工作,但对于其他所有人来说,将在 中显示正斜杠,而不是反斜杠,从而导致百分比编码的,不存在的URL https://example.com%5cgenerated_css!使用 时,您必须特别注意确保您的文件路径变量永远不会出现在URL中。$generated_css = DIRECTORY_SEPARATOR.'minified.css';echo "<link rel='stylesheet'href='https:​//example.com$generated_css'>";$generated_cssDIRECTORY_SEPARATOR

  • 最后,在不太可能的情况下,您的文件路径由非PHP代码使用 - 例如,在shell_exec调用中 - 您将无法混合斜杠,并且需要使用或使用realpath构造文件路径。DIRECTORY_SEPARATOR


推荐