PHP, 22 bayt
`<?=PATH_SEPARATOR>":";`
1
yol 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_dump
ve ç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_OS
sabitin başlaması durumunda test eder win
(büyük / küçük harfe duyarsız; Windows, WIN32, WINNT, ancak CYGWIN veya Darwin değil); 1
Windows için yazdırır , başka bir şey yok.
17/18 bayt :
<?=strlen("
")-1;
1
Windows 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_SUFFIX
olduğunu dll
ama ille sadece orada, Windows üzerinde.
php_uname()
işletim sistemi ve daha fazlası hakkında bilgi verir; Windows
Windows 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_OS
muhtemelen her zaman istenen bilgiyi içerecektir.