PHP, 22 байти
`<?=PATH_SEPARATOR>":";`
друкує, 1якщо роздільник шляху є крапкою з комою (двокрапка або порожня для всіх інших ОС, крім DOS та OS / 2), нічого іншого.
також 22 байти , але це не так безпечно:
<?=strpos(__FILE__,92);
друкує додатне ціле число, якщо шлях до файлу містить зворотну косу рису; інше нічого.
Безпечна альтернатива з 27 байтами : <?=DIRECTORY_SEPARATOR>"/";відбитки 1чи нічого.
Дивна знахідка : <?=__FILE__[1]==":";( 20 байт ) має бути, не безпечним, але добре. Але хоча __FILE__видає себе за рядок (я намагався var_dumpі gettype), його індексація видає помилку, якщо ви не скопіюєте її деінде (конкатенація також працює) або не використаєте її як функціональний параметр.
Правка:
<?=(__FILE__)[1]==":";(також 22 байти ) працює в PHP 7; але це тому, що дужки копіюють значення константи у тимчасову змінну.
27 байт : <?=stripos(PHP_OS,win)===0;
тестує, якщо заздалегідь визначена PHP_OSконстанта починається win(регістр нечутливий; Windows, WIN32, WINNT, але не CYGWIN чи Darwin); принти 1для Windows, інакше нічого.
17/18 байт :
<?=strlen("
")-1;
друкує, 1якщо він зберігався з Windows linebreak (також на DOS, OS / 2 та Atari TOS - хоча я сумніваюся, що хтось коли-небудь компілював PHP для TOS), інше 0.
Ви також можете перевірити константу PHP_EOL.
більше опцій:
PHP_SHLIB_SUFFIXє dllв Windows, але не обов'язково тільки там.
php_uname()повертає інформацію про операційну систему та інше; починається з WindowsWindows.
$_SERVER['HTTP_USER_AGENT']міститиме, Windowsколи викликається в браузері в Windows.
<?=defined(PHP_WINDOWS_VERSION_BUILD);(38 байт) працює в PHP> = 5.3
висновок
Єдиний надійний спосіб визначити, чи справді це Windows, а не все схоже на це, здається, перевірка назви ОС. Для PHP: php_os()може бути відключено з міркувань безпеки; але PHP_OS, ймовірно, завжди буде містити бажану інформацію.