在Windows上的file_exists()中使用DIRECTORY_SEPARATOR

时间:2010-08-24 08:48:09

标签: php

var_dump(DIRECTORY_SEPARATOR) // string '\' (length=1)
var_dump(file_exists("C:/1212.txt")); // true
var_dump(file_exists("C:\1212.txt")); // false
var_dump(file_exists("C:".DIRECTORY_SEPARATOR."1212.txt")); // false

DIRECTORY_SEPARATOR做什么?使用DIRECTORY_SEPARATOR

时,上述情况为何错误

7 个答案:

答案 0 :(得分:11)

  

DIRECTORY_SEPARATOR做了什么?

DIRECTORY_SEPARATOR等于"/"(Unix)或"\"(Windows),具体取决于平台。

  

为什么DIRECTORY_SEPARATOR的上述情况属于假?

因为双引号字符串"\123"会转换为"Q"PHP Manual中的更多详细信息)。

构建Windows路径时,您应该转义反斜杠:"C:\\1212.txt"或使用单引号字符串:'C:\1212.txt'

更好更清洁的方法是在路径字符串中直接使用Unix目录分隔符"/"(没有任何常量),在Windows下可以正常工作:"C:/1212.txt"

答案 1 :(得分:9)

当来到PS - Path Separators时,这里有一个提示:

Linux仅支持/

Windows支持\/

所以我的建议是制作所有内容/

define('DS','/'); //Should work.

如果您构建的应用程序是跨平台的,那么请考虑这样做。

define('DS','/');
define('BASE_ROOT',str_replace('\\',DS,dirname(__FILE__)));
require_once BASE_ROOT . DS . 'includes' . DS . 'init.php';

然后它应该在两个平台上运行良好。

了解:

http://en.wikipedia.org/wiki/Filename

http://en.wikipedia.org/wiki/Path_(computing)

答案 2 :(得分:3)

尝试:

var_dump(file_exists("C:\\1212.txt"));

反斜杠是一个转义字符,用于将一个字符串添加到字符串中,您需要将其与另一个字符串一起使用。

答案 3 :(得分:1)

DIRECTORY_SEPARATOR在Unix系统上返回/,在Win上返回\

答案 4 :(得分:0)

DIRECTORY_SEPARATOR是一个PHP常量,帮助程序员编写适用于不同操作系统的脚本。

假设您使用的是Windows计算机,看起来您的配置错误。

答案 5 :(得分:0)

我在博客上看到过一些错误,其他地方关于Windows的“正常”有正斜杠,并且不需要 *目录分隔符常量提供\或/字符取决于你是否正在运行Windows, Nix等 ...

这些常量非常/必要 因为Windows中的转发斜杠支持仅是/部分/实现

大多数Windows命令行实用程序都有使用/,正斜杠而不是连字符访问的开关, - 这是unix样式。这就是目录分隔符常量在脚本中很重要的原因。

破碎的例子:

C:\ Temp> del C:/ Temp / * .o / S / Q

错误消息:无效的开关 - “Temp”。

C:\温度>

答案 6 :(得分:0)

DIRECTORY_SEPARATOR非常不必要

恕我直言,应该放弃明确

没有使用除“/”以外的操作系统,我的意思是运行网络服务器的操作系统(MacOs classic?认真吗?)

要评论“Wind And Flame”的回复,他的例子也被打破了,因为如果你决定执行系统命令,那么你在任何情况下都会失去可移植性。当然,系统命令以系统语法表示。但是,包含系统调用的每个PHP命令(例如fopen,file_get_content等)都可以在Windows上与'/'一起使用。