Mam skrypt PHP, który można umieścić w systemie Windows lub Linux. W obu przypadkach muszę uruchomić różne polecenia.
Jak mogę wykryć, w jakim środowisku się znajduję? (najlepiej coś PHP zamiast sprytnych hacków systemowych)
Aktualizacja
Aby wyjaśnić, skrypt jest uruchamiany z wiersza poleceń.
\strncasecmp(\PHP_OS, 'WIN', 3) === 0
,\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'
i\stripos(\PHP_OS, 'WIN')
są poniżej 15%. Ponieważ wszystkie trzy rozwiązania zajmują tylko około 100 nanosekund, i tak byłaby to mikro-optymalizacja. Wybierz więc dowolne rozwiązanie. Na koniec możesz argumentować, że\strncasecmp(\PHP_OS, 'WIN', 3) === 0
jest to najbardziej czytelne.Odpowiedzi:
Sprawdź wartość
PHP_OS
stałej Docs .To daje różne wartości na Windows, jak
WIN32
,WINNT
lubWindows
.Zobacz także: Możliwe wartości dla: PHP_OS i
php_uname
Docs :źródło
stripos(PHP_OS, 'WIN') === 0
może być użyty zamiast tego, prawdopodobnie bardziej czytelny / prosty.Możesz sprawdzić, czy separatorem katalogów jest
/
(dla unix / linux / mac) czy\
w systemie Windows. Stała nazwa toDIRECTORY_SEPARATOR
.źródło
strpos(__FILE__,92)
wykorzystuje to samo zachowanie;PATH_SEPARATOR>":"
zwraca prawdę również dla Windows (PATH_SEPARATOR to ":" we wszystkich innych systemach operacyjnych).function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
wydaje się nieco bardziej elegancka niż przyjęta odpowiedź. Wspomniane powyżej wykrycie za pomocą DIRECTORY_SEPARATOR jest jednak najszybsze.
źródło
strncasecmp
przyjmuje pierwsze n znaków, a nie tylko n znaków. Gdybyś tego spróbował, przekonałbyś się, że mastrncasecmp('DARWIN', 'WIN', 3) == 0
wartośćfalse
.Zauważ, że PHP_OS donosi OS że PHP został zbudowany na , która niekoniecznie jest taka sama OS że jest uruchomiony na.
Jeśli korzystasz z PHP> = 5.3 i po prostu chcesz wiedzieć, czy korzystasz z systemu Windows, czy nie - Windows, przetestowanie, czy zdefiniowano jedną ze stałych specyficznych dla systemu Windows, może być dobrym rozwiązaniem, np .:
źródło
Do wykrycia tego można użyć funkcji php_uname .
źródło
Zgodnie z predefiniowanymi stałymi : notatki przesłane przez użytkownika rozwiązania Volkera i rdcapasso można po prostu utworzyć klasę pomocniczą w następujący sposób:
Stosowanie:
źródło
To powinno działać w PHP 4.3+:
źródło
Począwszy od PHP 7.2.0 możesz wykryć działający system operacyjny za pomocą stałej
PHP_OS_FAMILY
:Zobacz oficjalną dokumentację PHP, aby poznać możliwe wartości.
źródło
Rdzeń predefiniowane stałe: http://us3.php.net/manual/en/reserved.constants.php, który ma
PHP_OS (string)
stałą.Lub jeśli chcesz wykryć system operacyjny klienta:
Z http://us3.php.net/manual/en/function.get-browser.php
Zgodnie z twoją edycją możesz odwołać się do tej opublikowanej nazwy serwera PHP z wiersza poleceń
Możesz użyć
Więc
Zrobiłby dla ciebie sztuczkę, patrz tutaj http://php.net/manual/en/function.php-uname.php
źródło
Aby wykryć, czy jest to system Windows, OS X czy Linux:
stripos
jest nieco wolniejszy niżsubstr
w tym konkretnym przypadku, ale wystarczająco wydajny do tak małego zadania i bardziej elegancki.źródło
Możesz sprawdzić, czy stała istnieje w PHP> 5.3.0 ( ręcznie )
Wcześniej ta metoda była używana w Symfony. Teraz używają innej metody :
źródło
Jeśli chcesz sprawdzić, czy działa pod Linuksem, po prostu sprawdź, czy
(PHP_OS === 'Linux')
. Nie ma potrzeby używania strtolower () i substr ().źródło
źródło
Z http://www.php.net/manual/en/reserved.variables.server.php#102162 :
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.
źródło