PHP, 22 byte
`<?=PATH_SEPARATOR>":";`
mencetak 1jika pemisah path adalah titik koma (titik dua atau kosong untuk semua OS lain kecuali untuk DOS dan OS / 2), tidak ada yang lain.
juga 22 byte , tetapi tidak aman:
<?=strpos(__FILE__,92);
mencetak bilangan bulat positif jika path file berisi garis miring terbalik; selain itu tidak ada.
Alternatif aman dengan 27 byte : <?=DIRECTORY_SEPARATOR>"/";cetakan 1atau tidak sama sekali.
Temuan aneh : <?=__FILE__[1]==":";( 20 byte ) seharusnya, tidak aman juga, tapi ok. Tetapi meskipun __FILE__berpura-pura menjadi string (saya mencoba var_dumpdan gettype), pengindeksan itu melemparkan kesalahan, kecuali jika Anda menyalinnya di tempat lain (concatenation juga berfungsi) atau menggunakannya sebagai parameter fungsi.
Sunting:
<?=(__FILE__)[1]==":";(juga 22 byte ) berfungsi di PHP 7; tapi itu karena tanda kurung menyalin nilai konstanta ke variabel sementara.
27 byte : <?=stripos(PHP_OS,win)===0;
tes jika PHP_OSkonstanta yang sudah ditentukan dimulai dengan win(case-sensitive; Windows, WIN32, WINNT, tetapi tidak CYGWIN atau Darwin); mencetak 1untuk Windows, tidak ada yang lain.
17/18 byte :
<?=strlen("
")-1;
mencetak 1jika itu disimpan dengan linebreak Windows (juga pada DOS, OS / 2 dan Atari TOS - walaupun saya ragu ada yang mengompilasi PHP untuk TOS), yang lain 0.
Anda juga dapat memeriksa konstanta PHP_EOL.
lebih banyak pilihan:
PHP_SHLIB_SUFFIXada dlldi Windows, tetapi tidak harus hanya di sana.
php_uname()mengembalikan info tentang sistem operasi dan banyak lagi; dimulai dengan Windowsuntuk Windows.
$_SERVER['HTTP_USER_AGENT']akan berisi Windowsketika dipanggil di browser di Windows.
<?=defined(PHP_WINDOWS_VERSION_BUILD);(38 byte) berfungsi di PHP> = 5.3
kesimpulan
Satu-satunya cara yang gagal untuk mengetahui apakah itu benar-benar Windows, bukan sesuatu yang tampak seperti itu, tampaknya merupakan pemeriksaan pada nama OS. Untuk PHP: php_os()dapat dinonaktifkan karena alasan keamanan; tetapi PHP_OSmungkin akan selalu berisi info yang diinginkan.