PHP:跨OSs通用路径的好方法(斜线方向)
我最关心的是能够处理OSs中的路径,主要是在目录分隔符的前后斜杠方面 我使用的是PHP:跨OSs通用路径的好方法(斜线方向),php,path,operating-system,Php,Path,Operating System,我最关心的是能够处理OSs中的路径,主要是在目录分隔符的前后斜杠方面 我使用的是目录分隔符,但是: 写起来很长 路径可能来自不同的来源,不一定由您控制 我目前正在使用: function pth($path) { $runningOnWindows = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'); $slash = $runningOnWindows ? '\\' : '/'; $wro
目录分隔符
,但是:
function pth($path)
{
$runningOnWindows = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
$slash = $runningOnWindows ? '\\' : '/';
$wrongSlash = $runningOnWindows ? '/' : '\\' ;
return (str_replace($wrongSlash, $slash, $path));
}
我只是想知道我正在重新创造的语言中没有任何东西
是否已经有内置的PHP函数来执行此操作 您缺少预定义的常量
我知道目录分隔符
但是:1。写起来很长
懒惰从来不是任何事情的理由
$path = (DIRECTORY_SEPARATOR === '\\')
? str_replace('/', '\\', $subject)
: str_replace('\\', '/', $subject);
或
这将在一个步骤中取代“正确的一个”本身,但这没有任何区别
如果您确实知道存在路径,则可以使用
但是,这根本不是必需的,因为每个操作系统都将正斜杠
/
理解为有效的目录分隔符(即使是windows)。如果要将这些路径传递给标准PHP函数,就我所知,实际上不需要修复路径。像file\u get\u contents
或fopen
这样的基本函数在您向它们抛出的任何路径上都可以正常工作
static function fx_slsh($path) {
$path = str_replace(['/','\\'], DIRECTORY_SEPARATOR, $path);
return substr($path, -1) == DIRECTORY_SEPARATOR ? $path : $path . DIRECTORY_SEPARATOR;
}
这一个也将确保有一个尾随斜杠有一个保存当前操作系统分隔符的
目录分隔符
常量。它将帮助您,因为您不需要检查runningOnWindows
。你只需要让你的函数转换所有类型的斜杠,除了在目录中定义的斜杠
那么,这对于他想要做的是不够的(构建一个通用方法来将任何路径转换为当前操作系统的格式)。但这是一个错误start@Pekka:当然可以。但是他可能会丢失自定义操作系统检测,这是代码中最令人不快的事情。见鬼,你甚至可以在Windows上混合使用斜杠<代码>'C:\Foo\Bar/baz/what.php'在php中完全是一条合法的路径。呵呵,是的,真的没有理由去想这个。据我所知,只有一个例外,即它对win产生了影响,这里也提到了解决方案;)“你甚至可以在Windows上混合斜杠”。下面是一个在windows上不起作用的例子:exec(“rd path\with/mixed/slashes”)将/视为命令的键我不知道windows上的每个陷阱,但本主题是关于php的解决方案,通过exec()
执行的命令与php没有多大关系。@KingCrunch,你在文章中引用了他的话“懒惰从来不是任何事情的原因”,但他明确指出“路径可能来自不同的来源,不一定由您控制”是原因。Linux很高兴在访问目录时看到拖尾的/
,但我不确定Windows是否会喜欢。
$path = realpath($path);
static function fx_slsh($path) {
$path = str_replace(['/','\\'], DIRECTORY_SEPARATOR, $path);
return substr($path, -1) == DIRECTORY_SEPARATOR ? $path : $path . DIRECTORY_SEPARATOR;
}