PHP의 버전 번호 만 얻는 방법? 28 2018 13:19:29)

CentOS에 설치된 PHP 버전 만 가져오고 싶습니다.

출력 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 만받을 수있는 방법은 무엇입니까?



답변

내 시스템에서 :

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

모든 PHP 문자열 과 grep PHP일치 합니다 .

^PHP수단 “은 문자열 ‘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


답변

Jeff Schaller의 답변을 확장 하고 파이프 라인을 모두 건너 뛰고 내부 상수 표현을 요청하십시오.

$ php -r 'echo PHP_VERSION;'
7.1.15

이 패턴을 확장하여 더 많거나 적은 정보를 얻을 수 있습니다.

$ php -r 'echo PHP_MAJOR_VERSION;'
7

사용 가능한 모든 사전 정의 된 상수PHP 목록을 참조하십시오 .

주요 이점 :의 정의 된 출력 형식에 의존하지 않습니다 php -v. 파이프 라인 솔루션과 거의 동일한 성능을 감안할 때 더 강력한 선택입니다.


목표가 버전 을 테스트 하는 것이라면이 패턴을 사용할 수도 있습니다. 예를 들어이 코드는 0PHP> = 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


답변

패키지 관리자 (예 : RPM 또는 yum)를 통해 php를 설치 한 경우 여기에서 버전을 쿼리 할 수 ​​있습니다.

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

또는 php 에게 버전을 직접 알려주 도록 요청할 수 있습니다 .

php -r 'echo phpversion();'


답변

뒤에 다른 방법을 사용하고 싶습니다.

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

또는

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


답변

당신이 시작하기 때문에 awk, 여기의 awk솔루션 :

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


답변

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

또는

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


답변

파이프되는 단일 함수로만 수행하려면 다음과 같이 sed를 사용해보십시오.

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

먼저로 시작하지 않는 행을 삭제 PHP한 다음 형식의 첫 번째 시퀀스 인 것으로 가정하여 해당 행에서 버전을 자릅니다 x.y.z.

또는 원본 스크립트에 더 가까운 것을 원한다면 ^grep 패턴 앞에 PHP로 시작하는 줄만 찾으십시오.

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