PHP, 22 byte
`<?=PATH_SEPARATOR>":";`
in 1
nếu dấu phân cách đường dẫn là dấu chấm phẩy (dấu hai chấm hoặc trống cho tất cả các hệ điều hành khác ngoại trừ DOS và OS / 2), không có gì khác.
cũng 22 byte , nhưng không an toàn:
<?=strpos(__FILE__,92);
in một số nguyên dương nếu đường dẫn tệp chứa dấu gạch chéo ngược; không có gì khác
Một thay thế an toàn với 27 byte : <?=DIRECTORY_SEPARATOR>"/";
in 1
hoặc không có gì.
Một phát hiện lạ : <?=__FILE__[1]==":";
( 20 byte ) nên, cũng không an toàn, nhưng ok. Nhưng mặc dù __FILE__
giả vờ là một chuỗi (tôi đã thử var_dump
và gettype
), lập chỉ mục nó sẽ gây ra lỗi, trừ khi bạn sao chép nó ở một nơi khác (nối cũng hoạt động) hoặc sử dụng nó làm tham số hàm.
Chỉnh sửa:
<?=(__FILE__)[1]==":";
(cũng 22 byte ) hoạt động trong PHP 7; nhưng đó là vì các dấu ngoặc đơn sao chép giá trị không đổi trong một biến tạm thời.
27 byte : <?=stripos(PHP_OS,win)===0;
kiểm tra nếu PHP_OS
hằng số được xác định trước bắt đầu bằng win
(không phân biệt chữ hoa chữ thường; Windows, WIN32, WINNT, nhưng không phải CYGWIN hoặc Darwin); in 1
cho Windows, không có gì khác.
17/18 byte :
<?=strlen("
")-1;
in 1
nếu nó được lưu trữ với Windows linebreak (cũng trên DOS, OS / 2 và Atari TOS - mặc dù tôi nghi ngờ rằng bất kỳ ai đã từng biên dịch PHP cho TOS), khác 0
.
Bạn cũng có thể kiểm tra hằng số PHP_EOL
.
lựa chọn khác:
PHP_SHLIB_SUFFIX
là dll
trên Windows, nhưng không nhất thiết chỉ có ở đó.
php_uname()
trả về thông tin trên hệ điều hành và hơn thế nữa; bắt đầu với Windows
Windows.
$_SERVER['HTTP_USER_AGENT']
sẽ chứa Windows
khi được gọi trong trình duyệt trên Windows.
<?=defined(PHP_WINDOWS_VERSION_BUILD);
(38 byte) hoạt động trong PHP> = 5.3
phần kết luận
Cách duy nhất không an toàn để biết nếu nó thực sự là Windows, không phải bất cứ thứ gì trông giống như vậy, dường như là một kiểm tra về tên hệ điều hành. Đối với PHP: php_os()
có thể bị vô hiệu hóa vì lý do bảo mật; nhưng PHP_OS
có lẽ sẽ luôn chứa thông tin mong muốn