WindowsシステムまたはLinuxシステムに配置できるPHPスクリプトがあります。どちらの場合でも異なるコマンドを実行する必要があります。
現在の環境を検出するにはどうすればよいですか? (できれば、巧妙なシステムハッキングよりも何かPHP)
明確にするために、スクリプトはコマンドラインから実行しています。
Windowsでは、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!';
}
ディレクトリセパレーターが/
(unix/linux/macの場合)またはWindows上の\
かどうかを確認できます。定数名は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がbuilton であったOSを報告します。これは、必ずしも同じOSではありません現在実行されていること。
PHP> = 5.3を使用していて、Windowsで実行しているかどうかを知る必要がある場合は、 Windows固有の定数 のいずれかが定義されているかどうかをテストします。良い賭け、例えば:
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
php_uname 関数を使用してこれを検出できます。
echo php_uname();
これはPHP 4.3+で動作するはずです:
if (strtolower(PHP_SHLIB_SUFFIX) === 'dll')
{
// Windows
}
else
{
// Linux/UNIX/OS X
}
事前定義された定数:ユーザーが投稿したメモ Volkerと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で実行されているかどうかを確認する場合は、(PHP_OS === 'Linux')
かどうかをテストします。 strtolower()とsubstr()を使用する必要はありません。