看看PHP代码:
require_once dirname(__FILE__).DIRECTORY_SEPARATOR . './../../../wp-config.php';
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'inc/options.php';
Run Code Online (Sandbox Code Playgroud)
上面的代码来自wordpress的插件.
我不明白为什么有一半使用DIRECTORY_SEPARATOR,但另一半使用"/"?
所有 PHP IO 函数都会在内部将斜杠转换为适当的字符,因此您使用哪种方法并不重要。以下是一些需要考虑的事项。
当您打印出文件路径并且混合了\和时,它可能看起来很丑陋且令人困惑/。如果DIRECTORY_SEPARATOR使用,这将永远不会发生
使用诸如此类的东西$generated_css = DIRECTORY_SEPARATOR.'minified.css';对于文件 IO 来说一切正常且花哨,但是如果开发人员在不知不觉中在诸如 的 URL 中引用了它,那么就会产生一个错误。你懂了吗?虽然这会在Windows上工作,其他人正斜杠,而不是反斜杠,将在,导致百分比编码,不存在的,URL https://example.com %5C generated_css!使用 a 时,您必须特别小心,以确保您的文件路径变量永远不会出现在 URL 中。echo "<link rel='stylesheet'href='https://example.com$generated_css'>";$generated_cssDIRECTORY_SEPARATOR
最后,在不太可能的情况下,您的文件路径被非 PHP 代码使用 - 例如,在shell_exec调用中 - 您将无法混合斜杠,并且需要使用DIRECTORY_SEPARATOR或使用realpath构建文件路径。
因为在不同的操作系统中存在不同的目录分隔符。在Windows中,\在Linux中/。DIRECTORY_SEPARATOR与该OS目录分隔符保持一致。每次在路径中使用它。
在您的代码段中,我们清楚地看到了不良实践代码。如果framework / cms被广泛使用,并不意味着它正在使用最佳实践代码。
我从分发代码中了解到,应用程序在 Linux 和 Windows 上运行的最佳方法是永远不要使用 DIRECTORY_SEPARATOR 或反斜杠\\,而只使用正斜杠/。
为什么?因为反斜杠目录分隔符仅适用于 Windows。正斜杠适用于所有系统(Linux、Windows、Mac)。
使用常量 DIRECTORY_SEPARATOR 或转义反斜杠\\很快就会变得混乱。我的意思是看一下:
$file = 'path' . DIRECTORY_SEPARATOR . 'to' . DIRECTORY_SEPARATOR . 'file';
$file = str_replace('/', DIRECTORY_SEPARATOR, 'path/to/file';
$file = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? 'path\\to\\file' : 'path/to/file';
Run Code Online (Sandbox Code Playgroud)
当你可以这样做时:
$file = 'path/to/file';
Run Code Online (Sandbox Code Playgroud)
唯一的缺点是在 Windows 上;PHP 将为来自realpath()、等函数glob()以及 和 等魔术常量__FILE__的所有文件引用返回反斜杠__DIR__。因此,您可能需要将str_replace()它们放入正斜杠以保持一致。
$dir = str_replace('\\', '/', realpath('../'));
Run Code Online (Sandbox Code Playgroud)
我希望有一个 php.ini 设置来始终返回正斜杠。