【问题标题】:Accurately determine the type of OS PHP is running on准确确定运行 PHP 的 OS 类型
【发布时间】:2011-04-26 07:15:00
【问题描述】:

我需要确定运行 PHP 服务器的操作系统类型。 按类型,我指的是诸如“windows”或“linux”之类的字符串,而不是“wince”、“winnt”等。

到目前为止,我必须引导:PHP_OS 和 uname(),后者比早期更可靠(PHP_OS 说明了 PHP 是基于什么 OS 构建的 - 根据文档)。

【问题讨论】:

  • php_uname() 不满足您的要求吗?如果没有,为什么不呢?
  • 我需要操作系统类型,但是 php_uname 返回许多额外的细节,这使得检测变得困难(例如:winnt vs wince vs darwin => windows windows osx)。另外,我也不(不能)知道我能得到的所有类型的字符串。例如,我不运行 solaris 或 bsd - 此时不可能在这些系统上运行我自己的 php。
  • @Christian 这似乎是一件看起来很容易的事情,但同时又不可能做到 100% 可靠。请详细说明您到底需要这个做什么?也许这会导致一个关于一些完美指标的想法
  • @Pekka - 这是区分操作系统的通用函数。我希望检测 hpux 的人能够像检测 windows 的人一样轻松地做到这一点。可预测的结果相对重要。
  • @Christian 嗯,想到的唯一想法是打开一个社区 Wiki 问题,要求人们报告 uname() 在他们的系统上返回的内容。我想它会在 Unixes/Linuxes 上相对一致,实际上 is 有一个内置的 uname(),我相信它也遵循 Windowses 上的某种约定。这只是一个收集尽可能多的可能结果的问题。如果您决定这样做,请告诉我,我可以提供有关 Win7、Server 2003 和 2008 的信息

标签: php operating-system uname


【解决方案1】:

重要的是要知道非 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 ;-)。我已经有了这段代码,但正如我所说,它不可靠。
  • 现在我不是说你是骗子或疯子,但这听起来不可能!哈哈
  • P.S.注意 if than 语句的顺序。如果您首先检查 OSX,它将在“darwin”中获取“win”。
  • 关于你的PS,这正是我在上面回答的原因。它会在“darwin”中看到“win”,并认为它是“windows”。
  • 正确的顺序是:检查“darwin”,检查“win”,检查“linux”...
猜你喜欢
  • 2010-12-31
  • 1970-01-01
  • 2015-07-17
  • 2015-08-07
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多