PHP有没有用于检测它所运行的操作系统的函数?

9

我不知道在PHP数据库中应该以什么关键字搜索这个问题,所以我在这里询问。

我想知道的原因是因为不同的操作系统如何处理文本文档中的换行符。

我在Windows中使用CSV文件,但每次我认为我添加了一个新行时,实际上新行被粘贴到了最新行的后面。

原因是,在Windows中,新行是这样的:\r\n而我正在使用的CSVHandler.class.php文件只添加\n

然而,在MAC OS X中,这是新的一行,与Windows不同。

所以我正在寻找这个问题,以便我可以实现一个简单的if()语句来解决这个问题。目前我已经硬编码了\r\n,但它应该更简单,不是吗?


是的,在Windows上是\r\n,在*nix上是\n,而在Mac上是\r(这是三个中最愚蠢的实现)。 - dusoft
现在Mac是基于FreeBSD的,它们也使用\n吗? - Sonny
11个回答

15
PHP已经包含了常量PHP_EOL来解决你所面临的问题,该常量自PHP 4.3.10和PHP 5.0.2起可用 - 它包含了适合PHP所运行的服务器的换行符序列。
如果你想使用适合特定客户端的不同换行符序列,那么你需要自己编写代码来实现。一种确定客户端操作系统的方法是使用get_browser,前提是你的服务器有一个最新的browscap.ini文件。

12
您可以使用预定义的常量PHP_OS
我正在使用:

if (PHP_OS === 'WINNT') {...}


6

使用php_uname()函数可以获取有关服务器操作系统的信息:

echo 'I have been run on '.php_uname('s');

它还可以检索版本的完整信息。

帮我解决了一个类似的问题。+1 - MitMaro

2

您可能还想进行php info调用,以查看PHP设置中的许多配置设置,代码很简单:

phpinfo();

2

检查 $_SERVER 变量。

echo "<pre>";
print_r($_SERVER);

您可以使用strstr(或任何字符串比较函数)来检查是否在Windows上运行。在此示例中,我检查了SERVER_SIGNATURE,但您可以使用任何想要的键。

$isWindows = strstr($_SERVER[SERVER_SIGNATURE], "Win32") !== FALSE;

我的Windows机器(在Windows 7 64位上运行PHP 5.3的Apache 2.2)中,$_SERVER['SERVER_SIGNATURE']为空。我使用了另一个$_SERVER变量:$isWindows = strstr($_SERVER['SERVER_SOFTWARE'], "Win32") ? true : false; - Bouke

2
据我所知,如果PHP在Windows上运行,将会有一个名为WINDIR的环境变量。我认为你可以这样做:
$isWindows = isset($_SERVER['WINDIR']);

一个丑陋的变通方法可以解决问题。但是应该有更优美的解决方案。 - darnir

1

已经有很多答案了,但这是我的意见:

function windows_server()
#   Purpose:    Check if server is Windows
{
    return in_array(strtolower(PHP_OS), array("win32", "windows", "winnt"));
}

## --------------------------------------------------------

function linux_server()
#   Purpose:    Check if server is Linux
{
    return in_array(strtolower(PHP_OS), array("linux", "superior operating system"));
}

1

我建议使用php_uname。只需从文档中阅读解释:

php_uname - 返回有关运行PHP的操作系统的信息

我确实喜欢上面提到的PHP_OS建议,但要小心,根据文档中的说明:

考虑使用PHP_OS常量,但请记住,此常量将包含PHP所构建的操作系统。


0
<?php
$OSList = array
(
        // Match user agent string with operating systems
        'Windows 3.11' => 'Win16',
        'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
        'Windows 98' => '(Windows 98)|(Win98)',
        'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
        'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
        'Windows Server 2003' => '(Windows NT 5.2)',
        'Windows Vista' => '(Windows NT 6.0)',
        'Windows 7' => '(Windows NT 7.0)',
        'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
        'Windows ME' => 'Windows ME',
        'Open BSD' => 'OpenBSD',
        'Sun OS' => 'SunOS',
        'Linux' => '(Linux)|(X11)',
        'Mac OS' => '(Mac_PowerPC)|(Macintosh)',
        'QNX' => 'QNX',
        'BeOS' => 'BeOS',
        'OS/2' => 'OS/2',
        'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'
);

// Loop through the array of user agents and matching operating systems
foreach($OSList as $CurrOS=>$Match)
{
        // Find a match
        if (eregi($Match, $_SERVER['HTTP_USER_AGENT']))
        {
                // We found the correct match
                break;
        }
}
// You are using Windows Vista
echo "You are using ".$CurrOS;
?>

0
$svr_os=strtolower(reset(explode(' ',php_uname('s'))));

$isLinux=$svr_os==='linux';

$isWindows=$svr_os==='windows';

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