PHP脚本 – 检测是否在Linux或Windows下运行?
我有一个PHP脚本,可能会放在Windows系统或Linux系统。 无论是哪种情况,我都需要运行不同的命令。
我如何检测我在哪个环境? (最好是PHP而不是聪明的系统黑客)
实在抱歉!! 脚本从命令行运行!!!!
检查PHP_OS
常量文档的值。
它会给你在WIN32
, WINNT
或Windows
等Windows上的各种值。
另请参阅: 可能的值:PHP_OS和php_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 }