PHP, 22 bayt
`<?=PATH_SEPARATOR>":";`
1yol ayırıcı noktalı virgül ise (kolon ve DOS ve OS / 2 hariç diğer tüm işletim sistemleri için boş) ise başka bir şey yoksa yazdırır .
Ayrıca 22 bayt , ancak bu güvenli değil:
<?=strpos(__FILE__,92);
dosya yolu ters eğik çizgi içeriyorsa pozitif bir tam sayı yazdırır; başka bir şey yok. 27 bayt
ile güvenli bir alternatif : yazdırır ya da hiçbir şey.<?=DIRECTORY_SEPARATOR>"/";1
Garip bir keşif : <?=__FILE__[1]==":";( 20 bayt ) güvenli olmalı ya da tamam olmalı. Ancak __FILE__bir dize gibi görünmesine rağmen (denedim var_dumpve çalıştım gettype), dizine ekleme, bir başka yere kopyalamadığınız sürece (birleştirme de çalışır) ya da bir işlev parametresi olarak kullanmadığınız sürece, bir hata verir.
Düzenleme:
<?=(__FILE__)[1]==":";(ayrıca 22 bayt ) PHP 7'de çalışır; fakat parantezler sabitin değerini geçici değişkene kopyalar.
27 bayt : <?=stripos(PHP_OS,win)===0;
önceden tanımlanmış PHP_OSsabitin başlaması durumunda test eder win(büyük / küçük harfe duyarsız; Windows, WIN32, WINNT, ancak CYGWIN veya Darwin değil); 1Windows için yazdırır , başka bir şey yok.
17/18 bayt :
<?=strlen("
")-1;
1Windows satır sonu (DOS, OS / 2 ve Atari TOS'ta da saklandıysa) yazdırır , ancak birinin TOS için PHP'yi derlemiş olduğundan şüpheliyim 0.
Ayrıca sabiti de kontrol edebilirsiniz PHP_EOL.
Daha fazla seçenek:
PHP_SHLIB_SUFFIXolduğunu dllama ille sadece orada, Windows üzerinde.
php_uname()işletim sistemi ve daha fazlası hakkında bilgi verir; WindowsWindows ile başlar . Windows'ta bir tarayıcıda çağrıldığında
$_SERVER['HTTP_USER_AGENT']içerecektir Windows.
<?=defined(PHP_WINDOWS_VERSION_BUILD);(38 bayt) PHP'de çalışıyor> = 5.3
Sonuç
Gerçekten Windows olup olmadığını söylemenin tek güvenli yolu, buna benzeyen bir şey değil, işletim sisteminin adını kontrol etmek gibi görünüyor. PHP için: php_os()güvenlik nedeniyle devre dışı bırakılabilir; ama PHP_OSmuhtemelen her zaman istenen bilgiyi içerecektir.