[php] PHP 스크립트-Linux 또는 Windows에서 실행 중인지 감지합니까?

Windows 시스템 또는 Linux 시스템에 배치 할 수있는 PHP 스크립트가 있습니다. 두 경우 모두 다른 명령을 실행해야합니다.

내가 어떤 환경에 있는지 어떻게 알 수 있습니까? (영리한 시스템 해킹보다는 PHP가 바람직합니다)

최신 정보

명확히하기 위해 스크립트는 명령 행에서 실행 중입니다.



답변

PHP_OS상수 Docs 값을 확인하십시오 .

그것은 윈도우와 같은 당신에게 다양한 값을 줄 것이다 WIN32, WINNT또는 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!';
}


답변

디렉토리 구분 기호가 /(unix / linux / mac의 경우) 또는 \창에 있는지 확인할 수 있습니다 . 상수 이름은 DIRECTORY_SEPARATOR입니다.

if (DIRECTORY_SEPARATOR === '/') {
    // unix, linux, mac
}

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가되었다는 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
}


답변

이것은 PHP 4.3 이상에서 작동합니다 :

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