什么时候在PHP代码中使用DIRECTORY_SEPARATOR?

时间:2014-11-12 07:19:10

标签: php

查看PHP代码:

require_once dirname(__FILE__).DIRECTORY_SEPARATOR . './../../../wp-config.php';
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'inc/options.php';

以上代码来自wordpress的插件。

我不明白为什么有一半使用DIRECTORY_SEPARATOR,但另一半使用" /"?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

不要使用自己的文件夹分隔符。始终使用DIRECTORY_SEPARATOR,因为:

  1. 在某些特殊情况下,您确实需要正确的路径分隔符
  2. 操作系统可能会正确处理它,但许多第三方应用程序可能会失败!
  3. 某些操作系统不使用/或\作为分隔符,但使用不同的
  4. 不要忘记:仅在远程系统上使用常量 - 不要将它用于URI或您要发送给客户端的任何其他内容(除非您确实需要它,例如&# 34;远程浏览器")。

答案 2 :(得分:0)

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

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

  • 对于文件IO,使用$generated_css = DIRECTORY_SEPARATOR.'minified.css'之类的东西可以正常工作,但如果Window用户在不知不觉中使用诸如<link rel='stylesheet' href='https://example.com/$generated_css'>之类的URL引用它,则会创建一个错误。你懂了吗?尽管这在Windows上可以正常使用,但对于其他所有人,在$generated_css中都会出现一个正斜杠,因此在URL中也会出现正斜杠,从而导致编码后的URL不存在百分比https://example.com%5cgenerated_css。使用DIRECTORY_SEPARATOR时,必须格外小心,以确保您的变量从未在URL中使用。

  • 最后,在极少数情况下,非PHP代码使用了文件路径(例如,在shell_exec调用中),您将不得不使用DIRECTORY_SEPARATOR