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

Posted

技术标签:

【中文标题】如何在 PHP 中获取与平台无关的目录分隔符?【英文标题】:How to get a platform independent directory separator in PHP? 【发布时间】:2011-10-03 00:10:09 【问题描述】:

我正在 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 感到困惑。

【问题讨论】:

How do I properly split a PATH variable in PHP?的可能重复 值得一提:当使用/ 作为目录分隔符时,Windows 可以正常工作。通常不需要让它依赖于平台。我不知道,您所说的“混合 [..] 混淆 Windows”是什么意思 谢谢,@AJ。我错过了那个问题。 【参考方案1】:

试试这个

DIRECTORY_SEPARATOR

$patch = $somePath. DIRECTORY_SEPARATOR .$someFile

或者你可以定义你的

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

【讨论】:

不过,Windows 和 Linux 都支持 / 那么有什么问题呢? 我的实例中的问题是我正在动态地(来自 XULRunner)获取路径的前半部分($someDirectory),它在 Windows 上使用“\”。 PHP 在斜杠组合处给出 '/' 和 Windows barfs。 我的服务器返回“WINNT”而不是“Windows”。以防万一。 别打扰,这不是必须的。 并不是说它非常重要,但PATH_SEPARATOR 完全是另一回事(: 在 *nix 上,; 在 Windows 上)并且不是 DIRECTORY_SEPARATOR 的同义词。【参考方案2】:
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')           
    define("SEPARATOR", "\\");
else 
    define("SEPARATOR", "/");

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

【讨论】:

以上是关于如何在 PHP 中获取与平台无关的目录分隔符?的主要内容,如果未能解决你的问题,请参考以下文章

FileFileFilter递归初步

我应该如何以平台无关的方式获取TimeZoneInfo?

如何访问当前平台的文件路径分隔符?

如何在 Spring Boot 中从泛型参数(与任何类无关)中获取值

如何在 php 中刷新变量?

Java-与平台无关性