PHP、22バイト
`<?=PATH_SEPARATOR>":";`
1
パス区切り文字がセミコロン(DOSおよびOS / 2を除く他のすべてのOSの場合はコロンまたは空)である場合は印刷し、それ以外の場合は印刷しません。
また、22バイトですが、それほど安全ではありません:
<?=strpos(__FILE__,92);
ファイルパスにバックスラッシュが含まれる場合、正の整数を出力します。それ以外は何もありません。27バイトの
安全な代替手段:印刷するか、何もしない。<?=DIRECTORY_SEPARATOR>"/";
1
奇妙な発見:<?=__FILE__[1]==":";
(20バイト)は安全ではないはずですが、大丈夫です。が、しかし、__FILE__
ふりは、文字列を(私が試したことvar_dump
とgettype
)あなたは(連結でも動作します)どこか別の場所にそれをコピーしたり、関数のパラメータとしてそれを使用しない限り、それをインデックスすると、エラーがスローされます。
編集:
<?=(__FILE__)[1]==":";
(も22バイト)PHP 7で動作します。しかし、これは括弧が定数の値を一時変数にコピーするためです。
27バイト:<?=stripos(PHP_OS,win)===0;
定義済みPHP_OS
定数がwin
(大文字と小文字を区別しない、Windows、WIN32、WINNTで始まるが、CYGWINまたはDarwinではない)で始まるかどうかをテストします。1
Windows用に印刷します。それ以外は何もしません。
17/18バイト:
<?=strlen("
")-1;
1
Windowsの改行(DOS、OS / 2、Atari TOSでも保存されている場合-誰もPHPをTOS用にコンパイルしたとは思わないが)を印刷します0
。
定数も確認できPHP_EOL
ます。
より多くのオプション:
PHP_SHLIB_SUFFIX
ですdll
が、必ずしもだけが、Windows上で。
php_uname()
オペレーティングシステムなどに関する情報を返します。Windows
Windowsで始まります。Windowsのブラウザで呼び出されたとき
$_SERVER['HTTP_USER_AGENT']
に含まWindows
れます。
<?=defined(PHP_WINDOWS_VERSION_BUILD);
(38バイト)PHP> = 5.3で動作
結論
それが本当にWindowsであるかどうかを判断する唯一のフェイルセーフ方法は、そのように見えるものではなく、OS名のチェックのようです。PHPのphp_os()
場合:セキュリティ上の理由で無効になっている場合があります。ただし、PHP_OS
おそらく常に必要な情報が含まれます。