准确确定运行 PHP 的 OS 类型

Posted

技术标签:

【中文标题】准确确定运行 PHP 的 OS 类型【英文标题】:Accurately determine the type of OS PHP is running on 【发布时间】: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 的信息 【参考方案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”...

以上是关于准确确定运行 PHP 的 OS 类型的主要内容,如果未能解决你的问题,请参考以下文章

php7新特新

PHP

php高级变量

在没有 MIME 或扩展名的 PHP 中确定文件类型

给定传递给它的参数类型,如何确定函数参数的类型?

如何更精确的确定javascript的对象类型?