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

ret*_*one 63 php directory filepath

我正在PHP中构建一个路径字符串.我需要它跨平台(即Linux,Windows,OS X)工作.我这样做:

$path = $someDirectory.'/'.$someFile;
Run Code Online (Sandbox Code Playgroud)

在各种平台上运行时假设$someDirectory$someFile正确格式化.这适用于Linux和OS X,但不适用于Windows.问题是/我认为适用于Windows 的角色.

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

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

c:\Program Files (x86)\Sitefusion\Sitefusion.org\Defaults\pref/user.preferences
Run Code Online (Sandbox Code Playgroud)

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

gen*_*sis 117

试试这个吧

DIRECTORY_SEPARATOR

$patch = $somePath. DIRECTORY_SEPARATOR .$someFile
Run Code Online (Sandbox Code Playgroud)

或者你可以定义你的

PHP_OS == "Windows" ||
    PHP_OS == "WINNT" ? define("SEPARATOR", "\\") : define("SEPARATOR", "/"); 
Run Code Online (Sandbox Code Playgroud)

  • 但是,Windows和Linux都支持/那么有什么问题? (10认同)
  • **不要打扰**,这不是必需的. (3认同)
  • 并不是说它非常重要,但是`PATH_SEPARATOR`完全是另一回事(`:`on*nix,`;`在Windows上)并且不是`DIRECTORY_SEPARATOR`的同义词. (3认同)
  • 我的实例中的问题是我在Windows上使用'\'动态地从XULRunner获取路径的前半部分($ someDirectory).PHP在斜杠组合中给出'/'和Windows barfs. (2认同)

小智 8

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')           
    define("SEPARATOR", "\\");
else 
    define("SEPARATOR", "/");
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/function.php-uname.php