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()
повертає інформацію про операційну систему та інше; починається з Windows
Windows.
$_SERVER['HTTP_USER_AGENT']
міститиме, Windows
коли викликається в браузері в Windows.
<?=defined(PHP_WINDOWS_VERSION_BUILD);
(38 байт) працює в PHP> = 5.3
висновок
Єдиний надійний спосіб визначити, чи справді це Windows, а не все схоже на це, здається, перевірка назви ОС. Для PHP: php_os()
може бути відключено з міркувань безпеки; але PHP_OS
, ймовірно, завжди буде містити бажану інформацію.