PHP, 22 byte
`<?=PATH_SEPARATOR>":";`
stampa 1
se il separatore di percorso è punto e virgola (due punti o vuoto per tutti gli altri sistemi operativi tranne DOS e OS / 2), altrimenti nulla.
anche 22 byte , ma non così sicuro:
<?=strpos(__FILE__,92);
stampa un numero intero positivo se il percorso del file contiene una barra rovesciata; nient'altro.
Un'alternativa sicura con 27 byte : <?=DIRECTORY_SEPARATOR>"/";
stampe 1
o niente.
Una strana scoperta : <?=__FILE__[1]==":";
( 20 byte ) dovrebbe essere, neanche sicuro, ma ok. Ma sebbene __FILE__
finga di essere una stringa (ho provato var_dump
e gettype
), l'indicizzazione genera un errore, a meno che non venga copiata da qualche altra parte (funziona anche la concatenazione) o la usi come parametro di funzione.
Modifica:
<?=(__FILE__)[1]==":";
(anche 22 byte ) funziona in PHP 7; ma questo perché le parentesi copiano il valore della costante in una variabile temporanea.
27 byte : <?=stripos(PHP_OS,win)===0;
verifica se la PHP_OS
costante predefinita inizia con win
(senza distinzione tra maiuscole e minuscole; Windows, WIN32, WINNT, ma non CYGWIN o Darwin); stampa 1
per Windows, altrimenti niente.
17/18 byte :
<?=strlen("
")-1;
stampa 1
se è stato memorizzato con l'interruzione di riga di Windows (anche su DOS, OS / 2 e Atari TOS - anche se dubito che qualcuno abbia mai compilato PHP per TOS), altro 0
.
Puoi anche controllare la costante PHP_EOL
.
più opzioni:
PHP_SHLIB_SUFFIX
è dll
su Windows, ma non necessariamente solo lì.
php_uname()
restituisce informazioni sul sistema operativo e altro; inizia con Windows
per Windows.
$_SERVER['HTTP_USER_AGENT']
conterrà Windows
quando viene chiamato in un browser su Windows.
<?=defined(PHP_WINDOWS_VERSION_BUILD);
(38 byte) funziona in PHP> = 5.3
conclusione
L'unico modo sicuro per dire se è davvero Windows, non qualcosa di simile, sembra essere un controllo sul nome del sistema operativo. Per PHP: php_os()
può essere disabilitato per motivi di sicurezza; ma PHP_OS
probabilmente conterrà sempre le informazioni desiderate.