2017년 11월 30일 php 7.2 정식 버젼이 릴리즈
되었습니다.
php 7.2는 7.0 7.1에 이은 세번째 업그레이드 버전으로 일설에 의하면 7.x대의 마지막 버전이 될 것이라고 합니다. 나중 이력을 보면 php 7은 php 7.4까지 업데이트 후 2020년 11월 php 8로 메이저 업그레이드 합니다.
페이스북에서 만든 HHVM (HipHop Virtual Machine)과 경쟁하고자 php는 7.2를 끝으로 8.0으로 직행하다는 소식입니다. hackYa님은 PHP 8 과 JIT, HHVM 의 운명은?
이란 글에서 8.0은 JIT를 적용해 php 7.1에 비해서 2배정도 빨라질 것이라고 하네요.
[참고] 최신 발표된 PHP 8 설치 방법은 아래 글을 참조
1. php 7.2에서 변화된 것은?
다시 현실로 돌아와서 php 7.2는 7.1버젼에 비해서 무엇이 개선되었을까요? php 7.2의 변경 사항에 대해서 PHP 7.2 is due in November. What’s new?
에서 잘 정리해 놓았는데요. 보안이 강화되었고 소소한 php 성능 개선이 있었다고 알려져 있습니다. 물론 프로그래머 입장에서 중요한 문법의 변경 및 명령어 변경이 조금 있습니다.
- 보안 관련, password_hash에 2015년 보안 경진 대회에서 1위를 차지한 알고리즘인 argon2 방식 추가했으며 암호화 라이브러리인 Libsodium이 코어에 기본 장착되었다고 합니다.
- 성능과 관련 php 7.1에서 php 7.2로 업그레이드 시 성능은 8~12%정도 개선된다고 알려져 있습니다.
PHP 7.2 Provides Modest Performance Boost Over PHP 7.1
참조
▽ php 7.2 성능 벤치마킹,
잘 알려진 PHPBench에서 php 7.2는 약11% 성능 개선을 보였음
2. php 7.2 설치
그러면 php 7.2를 설치하려면 어찌해야 할까요? 아래 간단히 정리해 봅니다.
저는 ubuntu 7.10을 사용있어 이를 기준으로 정리합니다. ubuntu계열은 같은 방식으로 적용 가능 합니다.
2.1. PPA 등록
php를 설치하기 위해서는 ppa를 사용해야 합니다. ppa는 Personal Package Archive의 약자로 개인이 관련 자료를 올려놓은 저장소를 말합니다.
아마 이전 버젼의 php 설치 시 등록했을지 모르지만 다시 ppa(Personal Package Archive)를 등록해 줍니다.
php 설치 시 사용하는 ppa는 Ondřej Surý의 개인 저장소
가 가장 유명하고 많이 사용됩니다. 여기서도 Ondřej Surý의 개인 저장소를 이용할 것입니다.
이는 아래와 같은 명령을 사용합니다.
apt-get install -y python-software-properties
add-apt-repository -y ppa:ondrej/php
apt-get update -y
Code language: PHP (php)
2.2. 현재 php 적용 패키지 확인
본격적으로 새로운 버젼의 php를 설치하기 전에 현재 적용된 php 패키지를 확인합니다. 그래야 기존에 적용된 패키지를 다시 설치할 수 있으니깐요.
아래 명령을 사용하면 현재 사용중이 php관련 패키지 모듈 리스트가 주욱 뜹니다. 그리고 packages.txt에 저장이 됩니다. 이 파일은 현재 작업하고 있는 디렉토리에 저장됩니다.
dpkg -l | grep php | tee packages.txt
Code language: PHP (php)
2.3. php 7.2 설치
php 7.2 설치는 기본 모듈을 먼저 설피하고 이어서 추가로 모듈을 설치할 수 도 있고요. 아니면 기본 모듈과 추가 모듈을 한거번에 설치할 수도 있습니다.
여기는 정석대로 기본 모듈 설치 후 추가 모둘을 설치하겠습니다.
먼저 기본 모듈 설치 명령입니다. 이렇게하면 PHP 7.2가 작동하는데 필요한 기본 패키지가 설치됩니다. php7.2-fpm 패키지는 웹 서버 통합에 사용됩니다.
apt-get install php7.2 php7.2-common php7.2-cli php7.2-fpm -y
Code language: PHP (php)
다음으로는 php 추가 모듈을 설치합니다. 앞서 php 적용 패키지 확인 시 나왔던 모든 패키지를 설치해 줍니다.
apt-get install php7.2-common php7.2-json php7.2-opcache php7.2-mysql php7.2-mbstring php7.2-zip php7.2-gd php7.2-curl php7.2-xml php7.2-readline
Code language: PHP (php)
2.4. php handler 수정
설치 후 php handler 수정합니다.
nginx 기준으로 변경해야하는 파일은 /etc/nginx/conf.d/default.conf 인데요. 사람에 따라선 이를 다른 이름으로 사용하는 분도 있습니다. 여러개의 사이트를 운영하는 경우 사이트명을 변경하는 경우도 있습니다. 저도 이를 happist.com.conf라는 이름으로 사용하고 있습니다.
아무튼 편집 화면으로 들어가서 PHP handler의 내용중
fastcgi_pass unix:/run/php/php7.1-fpm.sock; 을 fastcgi_pass unix:/run/php/php7.2-fpm.sock; 로 바꾸어줘야 합니다. 그래야 php7.2을 인식하고 php7.2로 작동합니다.
# Add PHP handler
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass unix:/run/php/php7.2-fpm.sock; <---------- 이 부분을 7.2로 변경해야합니다.
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
# This file is present on Debian systems..
include fastcgi_params;
}
Code language: PHP (php)
2.5. date.timezone setting
PHP Default timezone 설정할 필요가 있습니다. 이것을 하지 않으면 시스템 타임존을 사용합니다. 이를 한국 시간으로 변경합니다.
타임존의 변경은 fpm 및 cli 디렉토리의 php.ini 두개 차일 모두 변경해 줍니다.
vi /etc/php/7.2/fpm/php.ini
vi /etc/php/7.2/cli/php.ini
Code language: PHP (php)
php.ini 파일이 열리면 date.timezone을 찾아서 date.timezone = Asia/Seoul로 변경합니다.
2.6. phpMyAdmin DB 업로드 용량 확대
phpMyAdmin에서 DB를 백업 받고 또 필요에 따라 DB 업로드하려면 업로드 용량 확대가 필요합니다. 아마 처음 PHP를 설치하면 2M로 설정되어 있어 금방 용량 부족으로 업로드가 불가능하게 됩니다. 이를 방지하기 위해서 php.ini에서도 용량을 원하는 만큼 증대합니다.
upload_max_filesize = 2M → ***M으로 변경
post_max_size = 2M → ***M으로 변경
Code language: PHP (php)
파일 업로드 용량에 대해서는 보안 문제로 이를 금지하도록 가이드하는 곳도 있습니다. 그러나 워드프레스에서 가끔 큰 용량의 파일 업로드가 필요한 시기가 있긴 합니다. 예를 들어 pdf 파일을 올려서 공유한다든지 아니면 사이트를 복제해 이전하는 경우는 대용량 파일 업로드가 필요하긴 합니다.
필요에따라 적절하게 사용하면 됩니다.
2.7. Enable Zend OPcache
Opcache는 PHP script 를 bytecode로 컴파일한 후에 공유 메모리에 저장하여 성능을 향상시키는 모듈이라고 합니다.
Opcache 관련해 Zend Opcache가 PHP 5.5부터 기본 모듈로 내장되었고 지속적으로 개발되고 있는 프로젝트이므로 이것을 사용하는 것이 좋을 것 같다고 하네요.
~이를 위해서는 php.ini에서 아래 문구를 추가합니다. ~
zend_extension=opcache.so
Code language: PHP (php)
[업데이트] 위레에 언급한 문구는 이미 /etc/php/7.2/mods-available/opcache.ini에 반영되어 있으며, php.ini에 opcache.enable=1로 기본으로 상요토록 설정되어 있으므로 추가 설정할 필요 없습니다.
2.8. php7.2-fpm 재시동
이러한 php.ini 설정이 끝났으면 php7.1-fpm를 재시동합니다. 그러면 변경된 옵션으로 작동할 것입니다.
systemctl restart nginx.service php7.2-fpm.service
Code language: PHP (php)
3. 기존 버젼 php 삭제하기
php 업그레이드 후 기존 버젼 삭제할 것인지에 대해서는 이런 저런 이야기가 있지만 저는 삭제하는 게 좋다고 봅니다.
실제로 한 서버에서 두개의 php가 작동할 수 없으므로 제대로 업그레이드 되었다면 기존 버젼은 전혀 필요가 없습니다.
그래서 아래와 같은 명령어로 php 7.1을 삭제했습니다.
apt-get purge php7.1*
Code language: PHP (php)
그러면 아래와 같은 메세지를 보이면서 php 7.1이 삭제 됩니다.
4. PHP 7.2 설치 후 만난 문제점 해결 방법
저는 PHP 7.2로 업데이트한 후 2가지 정도 문제를 만났는데요. 하나는 서버 업데이트 시 PPA 문제가 있다는 메세지가 나오면서 업데이트가 되지 않는 것이고, 또 하나는 PhpMyAdmin에서 서버에 문제가 있다는 이상한 메세지를 보이는 것이었습니다.
4.1. 서버 업데이트 시 PPA 에러 메세지
PHP 7.2 적용 후 서버 업데이트 명령을 내리면 아래와 같이 PPA에 문제가 있다는 메세지를 내면서 업데이트가 중단됩니다. 그러면 업그레이드 명령도 먹지가 있습니다.
Repository 'http://ppa.launchpad.net/ondrej/php/ubuntu artful InRelease' changed its 'Label' value from '***** The main PPA for PHP (5.6, 7.0, 7.1) with many PECL extensions *****' to '***** The main PPA for supported PHP versions with many PECL extensions *****'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
Code language: PHP (php)
아래 캡춰 이미지처럼 개인 저장소에서 php 7.2업데이트 버젼을 제대로 읽어 오지 못하는 것으로 보입니다.
이는 apt-secure manpage
에 따르면 손상되거나 시스템에 해를 끼칠 수 있는 패키지의 설치를 방지하는 보안 기능이라고 하는데요. php 7.2 보안이 강화되었기 때문에 개인 저장소를 이용하는 것에 대해서 경고하는 게 아닐까 싶습니다.
이런 경고에도 불구하고 계속 PPA를 사용하려면 다음과 같은 명령을 사용해서 해결 가능합니다. 저도 이를 사용해서 해결하긴 했습니다.
먼저 업데이트를 강제로 시행하게 하는 명령입니다. 이 명령어를 사용하면 문제없이 업데이트를 할 수 있습니다.
apt-get update --allow-releaseinfo-change
Code language: PHP (php)
위와 비슷한 문제를 해결했던 Installing php and nodejs on ubuntu 17
내용을 참조했습니다.
4.2. php 7.2 설치 후 phpMyAdmin에서 에러 발생 시
php 7.2를 설치 후 워드프레스에서는 아무런 문제가 없었습니다. 그런데 phpMyAdmin에서는 일부 기능에서 에러를 발생한다고 하네요.
즉 phpMyAdmin를 활성화하면 서버 에러가 감지되었다는 메세지가 나온다고 하는데요.
이 에러에 대해서는 PHP 7.2 설치 후 phpMyAdmin 에러 대처법
를 참조하시기 바랍니다.
이에 따르면 php 7.2로 업데이트 시 phpMyAdmin의 낮은 버젼과는 호환이 되지 않으므로 최신버젼으로 업데이트한다면 문제가 해결 될 수 있다고 합니다.