PHP脚本 – 检测是否在Linux或Windows下运行?

我有一个PHP脚本,可能会放在Windows系统或Linux系统。 无论是哪种情况,我都需要运行不同的命令。

我如何检测我在哪个环境? (最好是PHP而不是聪明的系统黑客)


实在抱歉!! 脚本从命令行运行!!!!

检查PHP_OS常量文档的值。

它会给你在WIN32WINNTWindows等Windows上的各种值。

另请参阅: 可能的值:PHP_OSphp_uname 文档

 if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { echo 'This is a server using Windows!'; } else { echo 'This is a server not using Windows!'; } 

不是testing的最健壮的方式,但是您可以检查目录分隔符是/ (对于unix / linux / mac)还是\ windows。 常量名称是DIRECTORY_SEPARATOR

 if (DIRECTORY_SEPARATOR == '/') { // linux } if (DIRECTORY_SEPARATOR == '\\') { // windows } 
 if (strncasecmp(PHP_OS, 'WIN', 3) == 0) { echo 'This is a server using Windows!'; } else { echo 'This is a server not using Windows!'; } 

似乎比接受的答案更优雅一些。 但是DIRECTORY_SEPARATOR的上述检测是最快的。

请注意, PHP_OS报告了PHP 构build的操作系统 ,这不一定是当前运行的操作系统。

如果您使用的是PHP> 5.3,只需要知道您是否在Windows上运行,那么testing是否定义了一个特定于Windows的常量可能是一个不错的select,例如:

 $windows = defined('PHP_WINDOWS_VERSION_MAJOR'); 

php_uname函数可以用来检测这个。

 echo php_uname(); 

核心预定义常量: http : PHP_OS (string)具有PHP_OS (string)常量。

或者如果你想检测客户端的操作系统:

 <?php echo $_SERVER['HTTP_USER_AGENT'] . "\n\n"; $browser = get_browser(null, true); print_r($browser); ?> 

http://us3.php.net/manual/en/function.get-browser.php


根据你的编辑,你可以从命令行参考这个dublicate PHP服务器名称

您可以使用

 string php_uname ([ string $mode = "a" ] ) 

所以

 php_uname("s") 

's':操作系统名称。 例如。 FreeBSD的。

会为你做的伎俩,看到这里http://php.net/manual/en/function.php-uname.php

这应该在PHP 4.3+中工作:

 if (strtolower(PHP_SHLIB_SUFFIX) === 'dll') { // Windows } else { // Linux/UNIX/OS X } 

要检测它是Windows,OS X还是Linux:

 if (stripos(PHP_OS, 'win') === 0) { // code for windows } elseif (stripos(PHP_OS, 'darwin') === 0) { // code for OS X } elseif (stripos(PHP_OS, 'linux') === 0) { // code for Linux } 

stripos在这个特殊情况下比substr慢一点,但是对于这样一个小任务来说它是足够高效的,而且更加优雅。

根据预定义的常量:用户注释 Volker和rdcapasso解决scheme,您可以简单地创build助手类如下:

 <?php class System { const OS_UNKNOWN = 1; const OS_WIN = 2; const OS_LINUX = 3; const OS_OSX = 4; /** * @return int */ static public function getOS() { switch (true) { case stristr(PHP_OS, 'DAR'): return self::OS_OSX; case stristr(PHP_OS, 'WIN'): return self::OS_WIN; case stristr(PHP_OS, 'LINUX'): return self::OS_LINUX; default : return self::OS_UNKNOWN; } } } 

用法:

 if(System::getOS() == System::OS_WIN) { // do something only on Windows platform } 

http://www.php.net/manual/en/reserved.variables.server.php#102162

 <?php echo '<table border="1">'; foreach ($_SERVER as $k => $v){ echo "<tr><td>" . $k ."</td><td>" . $v . "</td></tr>"; } echo "</table>" ?> 

这是整个$ _SERVER数组…正如ArtWorkAD所指出的,通过使用HTTP_USER_AGENT键,您可以更明确地提取操作系统。

 function isWin(){ if (strtolower(substr(PHP_OS, 0, 3)) === 'win' || PHP_SHLIB_SUFFIX == 'dll' || PATH_SEPARATOR == ';') { return true; } else { return false; } } 

你可以检查一个常量是否存在于PHP> 5.3.0( 手动 )

 if (defined('PHP_WINDOWS_VERSION_BUILD')) { // is Windows } 

以前,这个方法在Symfony中使用。 然后他们使用不同的方法 。

 if ('\\' === DIRECTORY_SEPARATOR) { // is Windows }