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 (также в 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
, вероятно, всегда будет содержать нужную информацию.