PHP, 22 ไบต์
`<?=PATH_SEPARATOR>":";`
พิมพ์1
หากตัวคั่นพา ธ เป็นเซมิโคลอน (โคลอนหรือว่างเปล่าสำหรับ OS อื่น ๆ ทั้งหมดยกเว้นสำหรับ DOS และ OS / 2) ไม่มีอะไรอื่น
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
(case insensitive; Windows, WIN32, WINNT แต่ไม่ใช่ CYGWIN หรือ Darwin) พิมพ์1
สำหรับ Windows ไม่มีอะไรอื่น
17/18 ไบต์ :
<?=strlen("
")-1;
พิมพ์1
ถ้ามันถูกเก็บไว้กับ Windows linebreak (เช่นใน DOS, OS / 2 และ Atari TOS - แม้ว่าฉันจะสงสัยว่าใครก็ตามที่คอมไพล์ PHP สำหรับ TOS เป็นอย่างอื่น0
)
PHP_EOL
นอกจากนี้คุณยังสามารถตรวจสอบอย่างต่อเนื่อง
ตัวเลือกเพิ่มเติม:
PHP_SHLIB_SUFFIX
อยู่dll
บน Windows แต่ไม่จำเป็นเท่านั้น
php_uname()
ส่งคืนข้อมูลบนระบบปฏิบัติการและอื่น ๆ เริ่มต้นด้วยWindows
สำหรับ Windows
$_SERVER['HTTP_USER_AGENT']
จะมีWindows
เมื่อเรียกในเบราว์เซอร์บน Windows
<?=defined(PHP_WINDOWS_VERSION_BUILD);
(38 ไบต์) ทำงานใน PHP> = 5.3
ข้อสรุป
วิธีเดียวที่ไม่ปลอดภัยที่จะบอกได้ว่าเป็น Windows จริง ๆ หรือไม่ดูเหมือนว่าจะเป็นชื่อของระบบปฏิบัติการ สำหรับ PHP: php_os()
อาจถูกปิดการใช้งานด้วยเหตุผลด้านความปลอดภัย แต่PHP_OS
อาจจะมีข้อมูลที่ต้องการอยู่เสมอ