准确确定PHP运行的操作系统类型

3
我需要确定PHP服务器运行的操作系统类型。所谓类型,是指像“windows”或“linux”这样的字符串,而不是“wince”、“winnt”等。
到目前为止,我有两个线索:PHP_OS和uname(),后者比前者更可靠(根据文档,PHP_OS显示PHP构建在哪个操作系统上)。

php_uname()不能满足您的需求吗?如果不行,为什么? - Pekka
1
我需要操作系统类型,但是php_uname返回了很多额外的细节,这使得检测变得困难(例如:winnt vs wince vs darwin => windows windows osx)。此外,我也不知道(也不能)获取所有类型的字符串。例如,我没有运行solaris或bsd - 在这一点上,无法在这些系统上运行自己的php。 - Christian
@Christian,这似乎是一件看起来非常简单,但同时又无法100%可靠的事情之一。您能详细说明您需要这个东西的原因吗?也许这会引发一些关于完美指标的想法。 - Pekka
@Pekka - 这是一个通用函数,用于区分操作系统。我希望检测hpux的人能够像检测Windows的人一样轻松地完成这个任务。可预测的结果相对重要。 - Christian
@Christian 最近有一个变化。我会把它当作普通问题来提问,如果有人抱怨说应该是社区维基,请将他们指向该页面。 - Pekka
显示剩余7条评论
1个回答

8

需要知道的是,任何非Windows操作系统字符串都不会包含文本“win”,而任何非OSX操作系统字符串都不会包含单词“darwin”,等等。检测操作系统很容易。

$uname = strtolower(php_uname());
if (strpos($uname, "darwin") !== false) {
    // It's OSX
} else if (strpos($uname, "win") !== false) {
    // It's windows
} else if (strpos($uname, "linux") !== false) {
    // It's Linux
} else {
    // It's something your script won't run on
}

它将OSX识别为Windows ;-). 我已经有了这段代码,但就像我说的,它不可靠。 - Christian
现在我不是在说你撒谎或者疯了,但那听起来不可能啊!哈哈 - mellowsoon
3
请注意if than语句的顺序。如果先检查OSX,则会捕获“darwin”中的“win”。 - mellowsoon
2
关于您的PS,这正是我之前回复的原因。它会在“darwin”中看到“win”,并认为它是“windows”。 - Christian
2
正确的顺序应该是:检查 "darwin",检查 "win",检查 "linux"... - slosd
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接