답변:
PHP_OS
상수 Docs 값을 확인하십시오 .
그것은 윈도우와 같은 당신에게 다양한 값을 줄 것이다 WIN32
, WINNT
또는 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!';
}
stripos(PHP_OS, 'WIN') === 0
대신 더 읽기 쉽고 간단하게 사용할 수 있습니다.
디렉토리 구분 기호가 /
(unix / linux / mac의 경우) 또는 \
창에 있는지 확인할 수 있습니다 . 상수 이름은 DIRECTORY_SEPARATOR
입니다.
if (DIRECTORY_SEPARATOR === '/') {
// unix, linux, mac
}
if (DIRECTORY_SEPARATOR === '\\') {
// windows
}
strpos(__FILE__,92)
동일한 행동을 이용합니다. PATH_SEPARATOR>":"
Windows에서도 true를 리턴합니다 (다른 모든 OS에서 PATH_SEPARATOR는 ":"임).
function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
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를 사용한 앞서 언급 한 탐지가 가장 빠릅니다.
strncasecmp
소요 처음 n 개의 문자뿐 아니라 모든 n 개의 문자를. 당신이 그것을 시도한다면, 당신은 strncasecmp('DARWIN', 'WIN', 3) == 0
~로 평가되는 것을 알 것입니다 false
.
참고 PHP_OS는 PHP가되었다는 OS보고 내장 에 반드시 현재 실행되고있는 동일한 OS 아니다.
PHP가 5.3 이상이고 Windows에서 실행 중인지 여부를 알아야하는 경우 Windows 관련 상수 중 하나 가 정의되어 있는지 테스트 하는 것이 좋습니다. 예 :
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
php_uname의 기능이 검출하는데 사용될 수있다.
echo php_uname();
에 따라 미리 정의 된 상수 : 사용자가 노트 기여 폴커의와 rdcapasso 솔루션, 당신은 단순히 다음과 같이 헬퍼 클래스를 생성 할 수 있습니다 :
<?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://us3.php.net/manual/en/reserved.constants.phpPHP_OS (string)
또는 클라이언트의 OS를 감지하려는 경우 :
<?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
편집에 따르면 명령 줄 에서이 복제 된 PHP 서버 이름을 참조 할 수 있습니다
당신이 사용할 수있는
string php_uname ([ string $mode = "a" ] )
그래서
php_uname("s")
's': 운영 체제 이름 예. FreeBSD.
당신을 위해 트릭을 할 것입니다, 여기를 참조하십시오 http://php.net/manual/en/function.php-uname.php
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
이 특별한 경우 보다 약간 느리지 만 작은 작업에 충분하고 효율적입니다.
Linux에서 실행 중인지 확인하려면 if 만 테스트하십시오 (PHP_OS === 'Linux')
. strtolower () 및 substr ()을 사용할 필요가 없습니다.
에서 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>"
?>
ArtWorkAD가 지적했듯이 이것은 전체 $ _SERVER 배열입니다. HTTP_USER_AGENT 키를 사용하여 OS를보다 명시 적으로 추출 할 수 있습니다.
\strncasecmp(\PHP_OS, 'WIN', 3) === 0
,\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'
그리고\stripos(\PHP_OS, 'WIN')
15 % 이하이다. 세 가지 솔루션은 모두 대략 100 나노초 밖에 걸리지 않으므로 어쨌든 마이크로 최적화가 될 것입니다. 원하는 솔루션을 선택하십시오. 마지막으로,\strncasecmp(\PHP_OS, 'WIN', 3) === 0
가장 읽기 쉽다고 주장 할 수 있습니다 .