পিএইচপি স্ক্রিপ্ট - লিনাক্সের অধীনে চলছে কিনা তা সনাক্ত করুন বা উইন্ডোজ?


143

আমার একটি পিএইচপি স্ক্রিপ্ট রয়েছে যা উইন্ডোজ সিস্টেম বা একটি লিনাক্স সিস্টেমে স্থাপন করা যেতে পারে। আমার উভয় ক্ষেত্রেই বিভিন্ন কমান্ড চালানো দরকার।

আমি কোন পরিবেশে রয়েছি তা কীভাবে সনাক্ত করতে পারি? (সাধারণত চৌকস সিস্টেম হ্যাকের চেয়ে কিছু পিএইচপি)

হালনাগাদ

স্পষ্ট করার জন্য, স্ক্রিপ্টটি কমান্ড লাইন থেকে চলছে।


Benchmarks করণ পর মনে হয় মধ্যে কর্মক্ষমতা যে কোনো পার্থক্য \strncasecmp(\PHP_OS, 'WIN', 3) === 0, \strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'এবং \stripos(\PHP_OS, 'WIN')15% এর নিচে হয়। যেহেতু তিনটি সমাধানই কেবলমাত্র 100 ন্যানোসেকেন্ড গ্রহণ করে, যাইহোক, এটি একটি মাইক্রো-অপ্টিমাইজেশান হবে। সুতরাং আপনার পছন্দসই সমাধানটি বেছে নিন। অবশেষে, আপনি তর্ক করতে পারেন যে \strncasecmp(\PHP_OS, 'WIN', 3) === 0এটি সবচেয়ে পাঠযোগ্য।
কাও

উত্তর:


228

PHP_OSধ্রুবক ডক্সের মান পরীক্ষা করুন ।

এটি আপনাকে উইন্ডোজ যেমন WIN32, WINNTবা বিভিন্ন ধরণের মান দেয় Windows

এছাড়াও দেখুন: এর জন্য সম্ভাব্য মানগুলি: PHP_OS এবং php_unameডক্স :

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    echo 'This is a server using Windows!';
} else {
    echo 'This is a server not using Windows!';
}

এটি যদি উইন্ডোজ হয় তবে এর মূল্য কী হবে? দস্তাবেজের এমন কিছুই নেই যা আমি দেখতে পাচ্ছি।
শাবিরোব


8
stripos(PHP_OS, 'WIN') === 0পরিবর্তে ব্যবহারযোগ্য, তর্কযোগ্যভাবে আরও পঠনযোগ্য / সহজ।
জন হান্ট

1
@ dw1 - এটি এখনও "উইন" অনুসন্ধানের শুরুতে কাজ করবে।
জন হান্ট

62

ডিরেক্টরি বিভাজক /(ইউনিক্স / লিনাক্স / ম্যাকের জন্য) বা \উইন্ডোতে আপনি পরীক্ষা করতে পারেন । অবিচ্ছিন্ন নাম DIRECTORY_SEPARATOR

if (DIRECTORY_SEPARATOR === '/') {
    // unix, linux, mac
}

if (DIRECTORY_SEPARATOR === '\\') {
    // windows
}

দুর্ভাগ্যক্রমে এটি উইন্ডোজ 7 এবং জেন্ডার সার্ভারের সাথে কাজ করে না। এই ক্ষেত্রে DIRECTORY_SEPARATOR এছাড়াও '\'
আছিম

4
@আচিম আপনার মানে কি? জেন্ডার সার্ভার কোনও ওএস নয়, সার্ভার সফ্টওয়্যার। উইন্ডোজ 7 \ ফিরে আসা উচিত
এমপেন

1
strpos(__FILE__,92)একই আচরণ শোষণ করে; PATH_SEPARATOR>":"উইন্ডোজের জন্যও সত্য প্রত্যাবর্তন করে (PATH_SEPARATOR অন্যান্য সমস্ত ওএসের ক্ষেত্রে ":")।
তিতাস

এটি একটি ফাংশনে পরিণত হয়েছে:function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
মারিও লুরিগ

37
if (strncasecmp(PHP_OS, 'WIN', 3) == 0) {
    echo 'This is a server using Windows!';
} else {
    echo 'This is a server not using Windows!';
}

গৃহীত উত্তরের চেয়ে কিছুটা মার্জিত বলে মনে হচ্ছে। যদিও DIRECTORY_SEPARATOR এর সাথে পূর্বোক্ত সনাক্তকরণটি সবচেয়ে দ্রুত, তবে।


দুঃখিত, তবে আপনি যদি ম্যাক সার্ভার ব্যবহার করেন তবে এটি সঠিকভাবে কাজ করে না, ম্যাকের পরে আপনি একটি স্ট্রিং পাবেন যার মধ্যে "DARWIN" রয়েছে, এতে "WIN" রয়েছে, সুতরাং একটি ম্যাক সার্ভারে আপনি পাবেন "এটি উইন্ডোজ ব্যবহার করে একটি সার্ভার! " যা সত্য নয়.
ওএমএ

13
ঠিক আছে, এটি বেশ সত্য নয়। লক্ষ্য করুন যে কোনও এন অক্ষর নয়, প্রথম এন অক্ষর strncasecmpগ্রহণ করে । আপনি যদি এটি চেষ্টা করে থাকেন তবে আপনি এটির মূল্যায়ন করে খুঁজে বের করতে পারতেন । strncasecmp('DARWIN', 'WIN', 3) == 0false
ওন্দেজ বৌদা

18

লক্ষ্য করুন PHP_OS রিপোর্ট ওএস যে পিএইচপি ছিল নির্মিত উপর , যা অগত্যা একই অপারেটিং সিস্টেম এটি বর্তমানে চলতে থাকে।

আপনি যদি পিএইচপি> = 5.3 এ থাকেন এবং কেবল আপনি উইন্ডোতে চালাচ্ছেন কি না-উইন্ডোজ নয় তা জানতে হবে তবে উইন্ডোজ-নির্দিষ্ট ধ্রুবকগুলির মধ্যে একটি নির্ধারিত কিনা তা পরীক্ষা করা ভাল বাজি হতে পারে, যেমন:

$windows = defined('PHP_WINDOWS_VERSION_MAJOR');

4
১. পিএইচপি যেখানে চালু হয়েছিল তা সঠিক নয় তবে এটির জন্য এটি কী নির্মিত হয়েছিল ২. এটি একইভাবে সংজ্ঞায়িত উইন্ডোগুলির সাথে একই ধরণের প্রযোজ্য ...
স্ট্যানের

যাইহোক উইন্ডোজের জন্য নির্মিত পিএইচপি ইউনিক্সে চালানো যায় না, তাই না?
স্টালিনকো


7

পূর্বনির্ধারিত কনস্ট্যান্টস অনুসারে : ব্যবহারকারীর অবদান নোট ভলকার এবং rdcapasso সমাধান, আপনি কেবল এই জাতীয় সাহায্যকারী শ্রেণি তৈরি করতে পারেন:

<?php

class System {

    const OS_UNKNOWN = 1;
    const OS_WIN = 2;
    const OS_LINUX = 3;
    const OS_OSX = 4;

    /**
     * @return int
     */
    static public function getOS() {
        switch (true) {
            case stristr(PHP_OS, 'DAR'): return self::OS_OSX;
            case stristr(PHP_OS, 'WIN'): return self::OS_WIN;
            case stristr(PHP_OS, 'LINUX'): return self::OS_LINUX;
            default : return self::OS_UNKNOWN;
        }
    }

}

ব্যবহার:

if(System::getOS() == System::OS_WIN) {
  // do something only on Windows platform
}


5

পিএইচপি 7.2.0 দিয়ে শুরু করে আপনি ধ্রুবকটি ব্যবহার করে চলমান ওএস সনাক্ত করতে পারবেন PHP_OS_FAMILY:

if (PHP_OS_FAMILY === "Windows") {
  echo "Running on Windows";
} elseif (PHP_OS_FAMILY === "Linux") {
  echo "Running on Linux";
}

এর সম্ভাব্য মানগুলির জন্য অফিসিয়াল পিএইচপি ডকুমেন্টেশন দেখুন ।


4

মূল পূর্বনির্ধারিত ধ্রুবক: http://us3.php.net/manual/en/reided.constants.php যার PHP_OS (string)ধ্রুবক রয়েছে।

অথবা আপনি যদি ক্লায়েন্টের ওএস সনাক্ত করতে চান:

<?php
    echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

    $browser = get_browser(null, true);
    print_r($browser);
?>

Http://us3.php.net/manual/en/function.get-browser.php থেকে


আপনার সম্পাদনা অনুযায়ী আপনি কমান্ড লাইন থেকে এই প্রজাতন্ত্রক পিএইচপি সার্ভারের নাম উল্লেখ করতে পারেন

তুমি ব্যবহার করতে পার

string php_uname ([ string $mode = "a" ] )

সুতরাং

php_uname("s")

's': অপারেটিং সিস্টেমের নাম। যেমন। FreeBSD 'র।

আপনার জন্য কৌশলটি করবে, এখানে দেখুন http://php.net/manual/en/function.php-uname.php


4

এটি উইন্ডোজ, ওএস এক্স বা লিনাক্স কিনা তা সনাক্ত করতে:

if (stripos(PHP_OS, 'win') === 0) {
    // code for windows
} elseif (stripos(PHP_OS, 'darwin') === 0) {
    // code for OS X
} elseif (stripos(PHP_OS, 'linux') === 0) {
    // code for Linux
}

stripossubstrএই বিশেষ ক্ষেত্রেটির তুলনায় কিছুটা ধীর গতির , তবু এটি এত ছোট কাজের জন্য যথেষ্ট দক্ষ এবং আরও মার্জিত।


যদিও কোডটি যথেষ্ট সহজ, এই উত্তরটি নিজের মতো করে দাঁড়ায় না: একটি দুর্দান্ত উত্তর কোনও অনুসন্ধান ইঞ্জিন থেকে আসার সময় প্রশ্নটি পড়তে বাধ্য করে না, কারণ এটি স্বয়ংসম্পূর্ণ।
jpaugh

2

পিএইচপি> 5.3.0 ( ম্যানুয়াল ) এ কোনও ধ্রুবক উপস্থিত রয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন

if (defined('PHP_WINDOWS_VERSION_BUILD')) {
    // is Windows
}

আগে, এই পদ্ধতিটি সিমফোনিতে ব্যবহৃত হত। এখন তারা একটি আলাদা পদ্ধতি ব্যবহার করে :

if ('\\' === DIRECTORY_SEPARATOR) {
    // is Windows
}

0

আপনি যদি লিনাক্সের অধীনে চলছে কিনা তা পরীক্ষা করতে চান, তবে পরীক্ষা করুন (PHP_OS === 'Linux')। স্ট্রোলটার () এবং সাবস্ট্রাস্ট () ব্যবহার করার দরকার নেই।


-1
function isWin(){
 if (strtolower(substr(PHP_OS, 0, 3)) === 'win' || PHP_SHLIB_SUFFIX == 'dll' || PATH_SEPARATOR == ';') {
    return true;
 } else {
    return false;
 }
}

-2

Http://www.php.net/manual/en/reided.variables.server.php থেকে# 102162 :

<?php
echo '<table border="1">';

foreach ($_SERVER as $k => $v){
    echo "<tr><td>" . $k ."</td><td>" . $v . "</td></tr>";
}

echo "</table>"
?>

এটি পুরো .__SERVER অ্যারে ... আর্ট ওয়ার্কক্যাড যেমন উল্লেখ করেছে, HTTP_USER_AGENT কী ব্যবহার করে আপনি আরও স্পষ্টভাবে ওএসটি বের করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.