sil*_*npi 131 php linux windows operating-system detect
我有一个PHP脚本,可以放在Windows系统或Linux系统上.在任何一种情况下我都需要运行不同的命令.
我如何检测我所处的环境?(最好用PHP而不是聪明的系统黑客)
实在抱歉!!脚本从命令行运行!!!!
San*_*hal 215
检查PHP_OS常量文档的值.
它会在Windows上为您提供各种值WIN32,WINNT或者Windows.
请参阅:可能的值:PHP_OS和php_unameDocs:
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}
Run Code Online (Sandbox Code Playgroud)
Ibu*_*Ibu 57
您可以检查目录分隔符/(对于unix/linux/mac)还是\在Windows上.常量名称为DIRECTORY_SEPARATOR
if (DIRECTORY_SEPARATOR === '/') {
// unix, linux, mac
}
if (DIRECTORY_SEPARATOR === '\\') {
// windows
}
Run Code Online (Sandbox Code Playgroud)
Ond*_*uda 37
if (strncasecmp(PHP_OS, 'WIN', 3) == 0) {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}
Run Code Online (Sandbox Code Playgroud)
似乎比接受的答案更优雅.但是,使用DIRECTORY_SEPARATOR进行的上述检测是最快的.
jos*_*mmo 19
从 PHP 7.2.0 开始,您可以使用常量检测正在运行的操作系统PHP_OS_FAMILY:
if (PHP_OS_FAMILY === "Windows") {
echo "Running on Windows";
} elseif (PHP_OS_FAMILY === "Linux") {
echo "Running on Linux";
}
Run Code Online (Sandbox Code Playgroud)
有关其可能的值,请参阅官方 PHP 文档。
小智 16
需要注意的是PHP_OS报告说,PHP是操作系统内置的,这不一定是当前运行在相同的操作系统.
如果您使用PHP> = 5.3并且只需要知道您是在Windows上运行还是不在Windows上运行,那么测试是否定义了一个特定于Windows的常量可能是一个不错的选择,例如:
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
Run Code Online (Sandbox Code Playgroud)
这应该适用于PHP 4.3+:
if (strtolower(PHP_SHLIB_SUFFIX) === 'dll')
{
// Windows
}
else
{
// Linux/UNIX/OS X
}
Run Code Online (Sandbox Code Playgroud)
要检测它是 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
}
Run Code Online (Sandbox Code Playgroud)
stripos比这个特殊情况要慢一些substr,但对于这样一个小任务来说它已经足够高效了,而且更优雅。
您可以检查 PHP >5.3.0 中是否存在常量(手动)
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
// is Windows
}
Run Code Online (Sandbox Code Playgroud)
此前,Symfony 中使用过此方法。现在他们使用不同的方法:
if ('\\' === DIRECTORY_SEPARATOR) {
// is Windows
}
Run Code Online (Sandbox Code Playgroud)
根据“ 预定义常量:用户贡献的注释”, 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
if(System::getOS() == System::OS_WIN) {
// do something only on Windows platform
}
Run Code Online (Sandbox Code Playgroud)