PHP, 22 byte
`<?=PATH_SEPARATOR>":";`
mencetak 1
jika 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 1
atau 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_dump
dan 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_OS
konstanta yang sudah ditentukan dimulai dengan win
(case-sensitive; Windows, WIN32, WINNT, tetapi tidak CYGWIN atau Darwin); mencetak 1
untuk Windows, tidak ada yang lain.
17/18 byte :
<?=strlen("
")-1;
mencetak 1
jika 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_SUFFIX
ada dll
di Windows, tetapi tidak harus hanya di sana.
php_uname()
mengembalikan info tentang sistem operasi dan banyak lagi; dimulai dengan Windows
untuk Windows.
$_SERVER['HTTP_USER_AGENT']
akan berisi Windows
ketika 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_OS
mungkin akan selalu berisi info yang diinginkan.