如何在PHP中获得与平台无关的目录分隔符?


68

我正在用PHP构建路径字符串。我需要它可以跨平台(即Linux,Windows,OS X)工作。我正在这样做:

$path = $someDirectory.'/'.$someFile;

假设$someDirectory$someFile在各种平台上在运行时正确格式化。在Linux和OS X上可以很好地工作,而在Windows上则不能。问题是/角色,我认为该角色适用于Windows。

是否有PHP函数或其他技巧可以\在Windows上的运行时将其切换到?

编辑:只是要清楚,结果字符串是

c:\Program Files (x86)\Sitefusion\Sitefusion.org\Defaults\pref/user.preferences

在Windows上。显然,斜杠的混合会混淆Windows。



4
值得一提的是:Windows/用作目录分隔符时运行良好。通常无需使其依赖平台。我不知道,“混合[..]混淆Windows”是什么意思
KingCrunch 2011年

谢谢,@ AJ。我错过了这个问题。
retrodrone

Answers:


122

试试这个

DIRECTORY_SEPARATOR

$patch = $somePath. DIRECTORY_SEPARATOR .$someFile

或者你可以定义你的

PHP_OS == "Windows" ||
    PHP_OS == "WINNT" ? define("SEPARATOR", "\\") : define("SEPARATOR", "/"); 

11
但是,Windows和Linux都支持/那有什么问题?

2
在我的实例中,问题是我正在动态地(从XULRunner)获取路径的前半部分($ someDirectory),该路径在Windows上使用“ \”。PHP在斜杠组合中使用'/'和Windows barfs。
retrodrone 2011年

1
我的服务器不是“ Windows”,而是“ WINNT”。以防万一。
棘手的2013年

3
不要打扰,这是没有必要的。
doublejosh

4
这并不是至关重要的,而是PATH_SEPARATOR完全其他的东西(:在* nix上,;在Windows上),并且不是的同义词DIRECTORY_SEPARATOR
icedwater

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.