PHP, 22 bajty
`<?=PATH_SEPARATOR>":";`
wypisuje, 1jeśli separator ścieżek jest średnikiem (dwukropek lub pusty dla wszystkich innych systemów operacyjnych oprócz DOS i OS / 2), w przeciwnym razie nic.
także 22 bajty , ale nie tak bezpieczne:
<?=strpos(__FILE__,92);
wypisuje dodatnią liczbę całkowitą, jeśli ścieżka do pliku zawiera ukośnik odwrotny; inaczej nic.
Bezpieczna alternatywa z 27 bajtami : <?=DIRECTORY_SEPARATOR>"/";odbitki 1lub nic.
Dziwne znalezisko : <?=__FILE__[1]==":";( 20 bajtów ) również nie powinno być bezpieczne, ale jest w porządku. Ale chociaż __FILE__udaje, że jest łańcuchem (próbowałem var_dumpi gettype), indeksowanie generuje błąd, chyba że skopiujesz go gdzie indziej (konkatenacja również działa) lub użyjesz go jako parametru funkcji.
Edycja:
<?=(__FILE__)[1]==":";(także 22 bajty ) działa w PHP 7; ale to dlatego, że nawiasy kopiują wartość stałej do zmiennej tymczasowej.
27 bajtów : <?=stripos(PHP_OS,win)===0;
sprawdza, czy wstępnie zdefiniowana PHP_OSstała zaczyna się od win(bez rozróżniania wielkości liter; Windows, WIN32, WINNT, ale nie CYGWIN lub Darwin); drukuje 1dla Windows, w przeciwnym razie nic.
17/18 bajtów :
<?=strlen("
")-1;
wypisuje, 1jeśli był przechowywany z łamaniem linii systemu Windows (także na DOS, OS / 2 i Atari TOS - chociaż wątpię, aby ktokolwiek kiedykolwiek skompilował PHP dla TOS), inaczej 0.
Możesz także sprawdzić stałą PHP_EOL.
więcej opcji:
PHP_SHLIB_SUFFIXjest dllw systemie Windows, ale niekoniecznie tylko tam.
php_uname()zwraca informacje o systemie operacyjnym i nie tylko; zaczyna się Windowsna Windows.
$_SERVER['HTTP_USER_AGENT']będzie zawierać Windowspo wywołaniu w przeglądarce w systemie Windows.
<?=defined(PHP_WINDOWS_VERSION_BUILD);(38 bajtów) działa w PHP> = 5.3
wniosek
Jedyny niezawodny sposób stwierdzenia, czy to naprawdę Windows, a nie coś takiego, wygląda na sprawdzenie nazwy systemu operacyjnego. Dla PHP: php_os()może być wyłączone ze względów bezpieczeństwa; ale PHP_OSprawdopodobnie zawsze będzie zawierać pożądane informacje.