我正在使用PHP作为我正在构建的命令行工具。我的工具必须在Windows和基于* NIX的系统上工作。我在Ubuntu Linux中的主要开发环境。
我想知道每次处理文件时我是否应该处理目录分隔符,或者PHP会照顾或者对我来说?例如:
在Linux中:
$user_home = get_user_home_folder();
$filePath = "{$user_home}/path/to/file.txt";
上面的代码是否可以在Windows上无需修改,或者我应该总是这样做:
$user_home = get_user_home_folder();
$filePath = "{$user_home}/path/to/file.txt";
if(is_windows_os()) {
$filePath = str_replace('/','\\',$filePath);
}
非常感谢任何建议。
答案 0 :(得分:1)
这对你有用:
<?
$filePath = "/path/to/file.txt";
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
//windows
$filePath = getenv('HOME').str_replace("/", "\\", $filePath);
echo $filePath;
} else {
//linux
$user_home = get_user_home_folder();
$filePath = $user_home.$filePath;
echo $filePath;
}
?>
在我的情况下(windows)outuputs:
C:\Users\Administrator\path\to\file.txt
备注:强>
我从未听说过一个名为get_user_home_folder()
的PHP函数我认为它是一个自定义函数。
答案 1 :(得分:1)
这可能对你有帮助。
define('DS', is_windows_os() ? '\\' : '/');
$user_home = get_user_home_folder();
$filePath = $user_home.DS."path".DS."to".DS."file.txt"
对路径使用常量DS,并在需要分隔符时自动更改
答案 2 :(得分:1)
PHP会尝试将'/'转换为正确的分隔符。如果您不想依赖该行为,它还会提供一个名为DIRECTORY_SEPARATOR
的内置常量。
该常量和join
函数可以很好地协同构建路径。
e.g。 $fullPath = join(DIRECTORY_SEPARATOR, [$userHome, 'path', 'to', 'file.txt']);