Porównaj ceny domen i usług IT, sprzedawców z całego świata

Skrypt PHP - sprawdź, czy działa pod Linuksem czy Windows?


Mam skrypt PHP, który można umieścić w systemie Windows lub Linux. I tak muszę wykonywać inne polecenia.
Jak mogę sprawdzić, w jakim środowisku się znajduję? (najlepiej coś PHP zamiast sprytnych hacków systemowych)

Aktualizacja
>
Aby wyjaśnić, skrypt jest uruchamiany z wiersza poleceń.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Sprawdź wartość

stałe
PHP_OS

<sup>
Docs
</sup>http://php.net/manual/reserved ... hp-os
.
Zapewnia różne wartości w systemie Windows, takie jak
WIN32
,
WINNT
lub
Windows
.
Zobacz też:
możliwe wartości dla: PHP_OS
https://coderoad.ru/738823/i
php_uname

<sup>
Docs
</sup>http://php.net/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!';
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz sprawdzić, czy separatorem katalogu jest
/
(dla unix/linux/mac) lub
\
w systemie Windows. Stała nazwa to
DIRECTORY_SEPARATOR
.
if (DIRECTORY_SEPARATOR === '/') {
// unix, linux, mac
}if (DIRECTORY_SEPARATOR === '\\') {
// windows
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

if (strncasecmp(PHP_OS, 'WIN', 3) == 0) {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}

wydaje się to być trochę bardziej eleganckie niż przyjęta odpowiedź. Jednak powyższe wykrycie za pomocą DIRECTORY_SEPARATOR jest najszybsze.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zwróć na to uwagę

PHP_OS zgłasza system operacyjny, na którym był

wybudowany

http://php.net/manual/en/function.php-uname.php
PHP, który niekoniecznie jest tym samym systemem operacyjnym, na którym obecnie działa.
Jeśli korzystasz z PHP & > = 5.3 i potrzebujesz tylko wiedzieć, czy używasz systemu Windows, czy nie-Windows, a następnie sprawdź, czy jeden z

Stałe specyficzne dla systemu Windows
http://php.net/manual/en/info.constants.php
może być dobrym zakładem, na przykład:
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Funkcjonować

php_uname
http://php.net/manual/en/function.php-uname.php
można go użyć do jego wykrycia.
echo php_uname();
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zgodnie z

predefiniowane stałe: Uwagi użytkownika
http://nl3.php.net/manual/en/r ... 13172
Rozwiązania Volkera i rdcapasso, możesz po prostu utworzyć klasę pomocniczą, taką jak ta:
<?phpclass 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;
}
}}


Za pomocą

:
if(System::getOS() == System::OS_WIN) {
// do something only on Windows platform
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To powinno działać w PHP 4.3+:
if (strtolower(PHP_SHLIB_SUFFIX) === 'dll')
{
// Windows
}
else
{
// Linux/UNIX/OS X
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Począwszy od PHP 7.2.0, możesz znaleźć system operacyjny O.S. używając stałej
PHP_OS_FAMILY
:
if (PHP_OS_FAMILY === "Windows") {
echo "Running on Windows";
} elseif (PHP_OS_FAMILY === "Linux") {
echo "Running on Linux";
}

Cm.

oficjalna dokumentacja
https://www.php.net/manual/res ... amily
PHP ze względu na możliwe wartości.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Podstawowe predefiniowane stałe:
http://us3.php.net/ manual/bathroom/reserved.constants.php
http://us3.php.net/manual/en/r ... s.php
który ma stałą
PHP_OS (string)
.
Lub jeśli chcesz wykryć system operacyjny klienta:
<?php
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n"; $browser = get_browser(null, true);
print_r($browser);
?>

From

http://us3.php.net/manual/en/function. get-browser.php
http://us3.php.net/manual/en/f ... r.php
Zgodnie ze swoją edycją możesz odwołać się do tego duplikatu PHP

nazwa serwera z linii poleceń
https://coderoad.ru/626416/
możesz użyć
string php_uname ([ string $mode = "a" ] )

Więc
php_uname("s")
„s”: nazwa systemu operacyjnego.
FreeBSD.

To by załatwiło sprawę, zobacz tutaj

http://php.net/manual/en/function.php-uname.php
http://php.net/manual/en/function.php-uname.php
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Aby ustalić, czy jest to system Windows, OS X czy 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
jest nieco wolniejszy niż
substr
w tym konkretnym przypadku, ale jest wystarczająco wydajny do tak małych zadań i bardziej elegancki.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz sprawdzić, czy stała istnieje w PHP & > 5.3.0 (

ręcznie
http://php.net/manual/en/info.constants.php
)
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
// is Windows
}

Ta metoda była wcześniej używana w Symfony. Teraz używają

inna metoda
https://github.com/symfony/sym ... b554c
:
if ('\\' === DIRECTORY_SEPARATOR) {
// is Windows
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli chcesz sprawdzić, czy działa pod Linuksem, po prostu sprawdź, czy działa
(PHP_OS === 'Linux')
. Nie ma potrzeby używania strtolower () i substr ().
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

function isWin(){
if (strtolower(substr(PHP_OS, 0, 3)) === 'win' || PHP_SHLIB_SUFFIX == 'dll' || PATH_SEPARATOR == ';') {
return true;
} else {
return false;
}
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Od

http://www.php.net/manual/en/r ... 02162
http://www.php.net/manual/en/r ... 02162
:
<?php
echo '<table border="1">';foreach ($_SERVER as $k => $v){
echo "<tr><td>" . $k ."</td><td>" . $v . "</td></tr>";
}echo "</table>"
?>

To jest cała tablica $ _SERVER ... jak zauważył ArtWorkAD, używając klucza HTTP_USER_AGENT, możesz wyodrębnić system operacyjny bardziej jawnie.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się