কীভাবে কেবল পিএইচপি এর সংস্করণ নম্বর পাবেন?


15

আমি CentOS এ কেবল পিএইচপি সংস্করণ ইনস্টল করতে চাই।

আউটপুট php -v

PHP 7.1.16 (cli) (built: Mar 28 2018 13:19:29) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

আমি নিম্নলিখিতটি চেষ্টা করেছিলাম:

php -v | grep PHP | awk '{print $2}'

তবে আমি যে আউটপুট পেয়েছি তা হ'ল:

7.1.16
(c)

আমি কীভাবে কেবল 7.1.16 পেতে পারি?


7
... | head -1বা আরও ভাল উপায় হতে পারে
লিনাক্সসিকিউরিটিফ্রিজ

ওহ, মাথা -1 খুব সহজ এবং elegant। ধন্যবাদ মানুষ.
ওয়ান

উত্তর:


13

আমার সিস্টেমে:

$> php -v | grep ^PHP | cut -d' ' -f2
7.0.32-0ubuntu0.16.04.1

যেমন grep PHPমিলে যায় যে পিএইচপি স্ট্রিং এটা encounters।

এর ^PHPঅর্থ "যখন কোনও লাইনের শুরুতে থাকে তখন কেবল 'পিএইচপি' স্ট্রিংটি মেলে"।

স্পষ্টতই, যদি আউটপুট ফর্ম্যাট php -vসংস্করণ / বিল্ডগুলিতে সামঞ্জস্য হয় তবে এটি কাজ করে।

রেফারেন্সের জন্য, পুরো আউটপুটটি ছিল:

PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.32-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

এই উত্তরটি এক অর্থে দুর্দান্ত ছিল যে আমি এটিকে httpd সংস্করণের সংস্করণটি গ্রেপ করতেও ব্যবহার করতে পারি: পি httpd -v | awk '/ ^ সার্ভার সংস্করণ / {মুদ্রণ $ 3}' | কাট-ডি '/' -ফ 2
এক

143

জেফ শ্যাচলারের উত্তর প্রসারিত করা , পাইপলাইনটি পুরোপুরি এড়িয়ে যান এবং কেবল অভ্যন্তরীণ স্থির প্রতিনিধিত্বের জন্য জিজ্ঞাসা করুন:

$ php -r 'echo PHP_VERSION;'
7.1.15

আরও বা কম তথ্য পেতে আপনি এই ধরণটি প্রসারিত করতে পারেন:

$ php -r 'echo PHP_MAJOR_VERSION;'
7

সমস্ত উপলব্ধ জন্য পূর্বনির্ধারিত ধ্রুবকগুলির পিএইচপি তালিকা দেখুন ।

প্রধান সুবিধা: এটি কোনও সংজ্ঞায়িত আউটপুট বিন্যাসের উপর নির্ভর করে না php -v। এটি পাইপলাইন সমাধান হিসাবে একই কর্মক্ষমতা সম্পর্কে দেওয়া, তারপরে এটি আরও শক্তিশালী পছন্দ বলে মনে হচ্ছে।


যদি আপনার উদ্দেশ্যটি সংস্করণটির পরীক্ষা করা হয় তবে আপনি এই প্যাটার্নটিও ব্যবহার করতে পারেন। উদাহরণস্বরূপ, এই কোডটি 0যদি পিএইচপি> = 7 এবং 1অন্যথায়: প্রস্থান করবে

php -r 'exit((int)version_compare(PHP_VERSION, "7.0.0", "<"));'

রেফারেন্সের জন্য, এখানে বিভিন্ন পরীক্ষার মামলার সময়, দ্রুততম আদেশ করা হয়েছে:

$ time for (( i=0; i<1000; i++ )); do php -v | awk '/^PHP [0-9]/ { print $2; }' >/dev/null; done

real    0m13.368s
user    0m8.064s
sys     0m4.036s

$ time for (( i=0; i<1000; i++ )); do php -r 'echo PHP_VERSION;' >/dev/null; done

real    0m13.624s
user    0m8.408s
sys     0m3.836s

$ time for (( i=0; i<1000; i++ )); do php -v | head -1 | cut -f2 -d' ' >/dev/null; done

real    0m13.942s
user    0m8.180s
sys     0m4.160s

26
এটি সত্যই একমাত্র সঠিক উত্তর। পিএইচপি-র বিভিন্ন বিল্ডের জন্য একই আউটপুট ফর্ম্যাটটির কোনও গ্যারান্টি নেইphp -v
সেফ

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

@ ইসমাইল মিগুয়েল আমি বিপরীতভাবে ধরে নিয়েছিলাম: একটি পাইপলাইন কাঁটাচামচ করার চেয়ে কম্পাইল এবং সম্পাদন দ্রুত হবে be তবে টাইমিং পরীক্ষাগুলি থেকে আমি জানতে পারি যে উভয় সমাধানের জন্য রান-টাইমে কোনও পরিসংখ্যানগত পার্থক্য নেই।
বিশপ

1
ঠিক আছে, আপনার পিএইচপি> অপকোড, অপকোড> সি এবং সি থেকে মেশিন ল্যাঙ্গুয়েজ করার ওভারহেড রয়েছে। এই ওভারহেড সবসময় ধ্রুবক হয়। পিএইচপি-তে ওপচা সক্ষম থাকতে পারে, যা এই সময়টি অনেকটা কমিয়ে দেয়। অন্যদিকে, আপনাকে প্রসেসগুলি স্প্যান করতে হবে এবং আউটপুট ইনপুট এবং কী-না তা পাস করতে হবে। আমি আউটপুট পার্সিংয়ের তুলনায় কয়েকবার (5-10) দৌড়ালে পিএইচপি কম হবে বলে আশা করব। তবে পরীক্ষার জন্য আপনাকে ধন্যবাদ।
ইসমাইল মিগুয়েল 14

21

আপনি যদি প্যাকেজ ম্যানেজারের মাধ্যমে পিএইচপি ইনস্টল করেন (যেমন RPM বা yum), তবে আপনি সেখান থেকে সংস্করণটি জিজ্ঞাসা করতে পারেন:

rpm -q --queryformat="%{VERSION}" php

বিকল্পভাবে, আপনি পিএইচপি থেকে সরাসরি এটির সংস্করণ আপনাকে বলতে বলতে পারেন :

php -r 'echo phpversion();'

6

বিভিন্ন উপায় আছে, আমি পিছনে চেহারা ব্যবহার করতে চাই:

php -v | grep -Po '(?<=^PHP )[^ ]+'

অথবা

php -v | grep -Po '(?<=PHP )([0-9.]+)'

গৌণ টিপ: re দ্বিতীয় রেজেক্সে অপ্রয়োজনীয়; .অক্ষর শ্রেণীর অভ্যন্তরের সাধারণ অর্থটি অকেজো হতে পারে, সুতরাং এটি ইতিমধ্যে ডিফল্টরূপে আক্ষরিক হিসাবে বিবেচিত হয়
ব্যবহারকারী 37131366

বাহ, যে একটি ব্যথা ছিল। single ট্যাগগুলিতে একক ব্যাকস্ল্যাশ রাখার কোনও উপায় আছে? স্ল্যাশ দ্বিগুণ করা কোনও কাজ করেনি
ব্যবহারকারী 37136666

@ ডিএন 3 এস প্যাটার্নটি উদ্ধৃত করে, এটি আমার জন্য একক ব্যাকস্ল্যাশ নিয়ে কাজ করে ...
রাভেক্সিনা

ওহ আমি বলতে চাইছিলাম, আমি কেবল কোড ট্যাগগুলিতে আবদ্ধ একটি একক \ চরিত্র চেয়েছিলাম
ইউজার 371366

ডাউন ভোট দেওয়ার সময় একটি মন্তব্য পোস্ট করা উপযুক্ত হবে ...
রাভেক্সিনা

5

আপনি যেহেতু শুরু করেছিলেন awk, তাই এখানে একটি awkসমাধান রয়েছে:

$ php -v | awk '/^PHP/{print $2}'
7.2.10

2
php -v | awk NR==1'{print $2}'

অথবা

php -v | awk '{print $2; exit}'

1
আপনি কেবল প্রথম লাইনটি প্রিন্ট করতে পারেনawk '{print $2; exit}'
fedorqui

0

আপনি যদি কেবল একটি একক ফাংশন পাইপযুক্ত করে এটি করতে চান তবে আপনি এইভাবে সেড ব্যবহার করে দেখতে পারেন:

php -v | sed -e '/^PHP/!d' -e 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/'

প্রথমে এটি যে কোনও লাইন মুছে দেয় যা দিয়ে শুরু হয় না PHP, তারপরে এটি সেই লাইন থেকে সংস্করণটিকে ক্লিপ করে এটি ধরে নিয়ে যে এটি আকারের প্রথম ক্রম x.y.z

অথবা, আপনি যদি আপনার মূল স্ক্রিপ্টের আরও কাছাকাছি কিছু চান তবে কেবল ^পিএইচপি দিয়ে শুরু হওয়া লাইনগুলি সন্ধান করার জন্য কেবল আপনার গ্রেপ প্যাটার্নের সামনে রেখে দিন:

php -v | grep ^PHP | awk '{print $2}'

গ্রেপ প্যাটার্নের সামনে ^ যুক্ত করে এটি যেভাবে কাজ করেছে তা আমি পছন্দ করি। উজ্জ্বল।
ওয়ান

0

আমি মনে করি এটি আরও পরিষ্কার এবং মার্জিত সমাধান (উইন্ডোতেও কাজ করা উচিত):

php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION.'.'.PHP_RELEASE_VERSION;"

আউটপুট মত হবে 7.2.24


এটি ইউনিক্স.স্ট্যাকেক্সেঞ্জার.এ.এ. / 471594/117549 এর উপর ভিত্তি করে ভারী বলে মনে হচ্ছে এবং কেবলমাত্র নতুন অংশটি অন্তর্ভুক্ত করতে অন্য উত্তরটিতে সম্পাদনা হিসাবে ভাল হতে পারে:.PHP_MINOR_VERSION
জেফ শ্যাচলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.