Saya memiliki skrip PHP yang dapat ditempatkan pada sistem windows atau sistem linux. Saya perlu menjalankan perintah yang berbeda dalam kedua kasus.
Bagaimana saya bisa mendeteksi lingkungan tempat saya berada? (lebih disukai sesuatu PHP daripada hack sistem pintar)
Memperbarui
Untuk memperjelas, skrip berjalan dari baris perintah.
\strncasecmp(\PHP_OS, 'WIN', 3) === 0
,\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'
dan di\stripos(\PHP_OS, 'WIN')
bawah 15%. Karena ketiga solusi hanya membutuhkan sekitar 100 nanodetik, ini akan menjadi optimasi mikro. Jadi pilih solusi apa pun yang Anda suka. Akhirnya, Anda mungkin berpendapat bahwa\strncasecmp(\PHP_OS, 'WIN', 3) === 0
itu yang paling mudah dibaca.Jawaban:
Periksa nilai Dokumen
PHP_OS
konstan .Ini akan memberi Anda berbagai nilai pada Windows seperti
WIN32
,WINNT
atauWindows
.Lihat juga: Nilai yang Mungkin Untuk: PHP_OS dan
php_uname
Documents :sumber
stripos(PHP_OS, 'WIN') === 0
dapat digunakan sebagai gantinya, bisa dibilang lebih mudah dibaca / sederhana.Anda dapat memeriksa apakah pemisah direktori
/
(untuk unix / linux / mac) atau\
di windows. Nama konstannya adalahDIRECTORY_SEPARATOR
.sumber
strpos(__FILE__,92)
mengeksploitasi perilaku yang sama;PATH_SEPARATOR>":"
mengembalikan true untuk Windows juga (PATH_SEPARATOR adalah ":" di semua OS lain).function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
sepertinya sedikit lebih elegan daripada jawaban yang diterima. Deteksi yang disebutkan sebelumnya dengan DIRECTORY_SEPARATOR adalah yang tercepat.
sumber
strncasecmp
mengambil n karakter pertama , bukan sembarang n karakter. Jika Anda mencobanya, Anda akan menemukan yang mengevaluasi .strncasecmp('DARWIN', 'WIN', 3) == 0
false
Perhatikan bahwa PHP_OS melaporkan OS yang PHP itu dibangun pada , yang belum tentu OS yang sama yang saat ini berjalan di.
Jika Anda menggunakan PHP> = 5.3 dan hanya perlu tahu apakah Anda menjalankan pada Windows atau bukan-Windows maka menguji apakah salah satu konstanta khusus Windows didefinisikan mungkin merupakan taruhan yang bagus, misalnya:
sumber
Fungsi php_uname dapat digunakan untuk mendeteksi ini.
sumber
Menurut Predefined Constants: User Contributed Notes Volker dan rdcapasso solusi, Anda dapat membuat kelas pembantu seperti ini:
Pemakaian:
sumber
Ini harus bekerja di PHP 4.3+:
sumber
Dimulai dengan PHP 7.2.0 Anda dapat mendeteksi OS yang sedang berjalan menggunakan konstanta
PHP_OS_FAMILY
:Lihat dokumentasi PHP resmi untuk kemungkinan nilainya.
sumber
Core Predefined Constants: http://us3.php.net/manual/en/reserved.constants.php yang memiliki
PHP_OS (string)
konstanta.Atau jika Anda ingin mendeteksi OS klien:
Dari http://us3.php.net/manual/en/function.get-browser.php
Menurut hasil edit Anda, Anda dapat merujuk ke Nama Server PHP dublicate ini dari Command Line
Kamu bisa memakai
Begitu
Akan melakukan trik untuk Anda, lihat di sini http://php.net/manual/en/function.php-uname.php
sumber
Untuk mendeteksi apakah itu Windows, OS X atau Linux:
stripos
sedikit lebih lambat daripadasubstr
dalam kasus khusus ini, namun cukup efisien untuk tugas sekecil itu, dan lebih elegan.sumber
Anda dapat memeriksa apakah ada konstanta di PHP> 5.3.0 ( manual )
Sebelumnya, metode ini digunakan di Symfony. Sekarang mereka menggunakan metode yang berbeda :
sumber
Jika Anda ingin memeriksa apakah berjalan di Linux, coba saja jika
(PHP_OS === 'Linux')
. Tidak perlu menggunakan strtolower () dan substr ().sumber
sumber
Dari http://www.php.net/manual/en/reserved.variables.server.php#102162 :
Ini adalah seluruh array $ _SERVER ... seperti yang dicatat ArtWorkAD, dengan menggunakan kunci HTTP_USER_AGENT, Anda dapat mengekstrak OS lebih eksplisit.
sumber