웹사이트 검색

CentOS 7에서 PHP 7로 업그레이드하는 방법


소개

2015년 12월 3일에 출시된 PHP 7은 스칼라 유형 힌트와 같은 새로운 기능과 함께 이전 버전의 언어보다 상당한 속도 향상을 약속합니다. 이 가이드는 커뮤니티에서 제공하는 패키지를 사용하여 PHP 5.x(모든 릴리스)를 실행하는 Apache 또는 Nginx 웹 서버를 PHP 7로 빠르게 업그레이드하는 방법을 설명합니다.

경고: 대부분의 주요 버전 언어 릴리스와 마찬가지로 생산 환경에서 PHP 7로 전환하기 전에 잠시 기다리는 것이 가장 좋습니다. 그동안 애플리케이션이 새 릴리스와의 호환성을 테스트하고, 벤치마크를 수행하고, 새로운 언어 기능에 익숙해지는 것이 좋습니다.

데이터베이스 관리를 위해 phpMyAdmin을 설치한 경우 phpMyAdmin 패키지가 아직 업그레이드를 지원하지 않으므로 업그레이드하기 전에 공식 CentOS PHP 7 패키지를 기다리는 것이 좋습니다. 활성 사용자가 있는 다른 서비스나 애플리케이션을 실행 중인 경우 스테이징 환경에서 이 프로세스를 먼저 테스트하는 것이 가장 안전합니다.

전제 조건

이 가이드는 Apache와 함께 mod_php를 사용하거나 Nginx와 함께 PHP-FPM을 사용하여 CentOS 7에서 PHP 5.x를 실행한다고 가정합니다. 또한 관리 작업을 위한 sudo 권한으로 구성된 루트가 아닌 사용자가 있다고 가정합니다.

PHP 5 설치 프로세스는 다음 가이드에 설명되어 있습니다.

  • Linux, Apache, MySQL, PHP(LAMP) 스택을 CentOS 7에 설치하는 방법
  • Linux, Nginx, MySQL, PHP(LEMP) 스택을 CentOS 7에 설치하는 방법

IUS 커뮤니티 프로젝트 저장소 구독하기

PHP 7.x는 아직 주요 배포용 공식 리포지토리에 패키지되지 않았으므로 타사 소스에 의존해야 합니다. 여러 리포지토리에서 PHP 7 RPM 파일을 제공합니다. 우리는 IUS 저장소를 사용할 것입니다.

IUS는 리포지토리를 구독하고 관련 GPG 키를 가져오기 위한 설치 스크립트를 제공합니다. 홈 디렉터리에 있는지 확인하고 curl을 사용하여 스크립트를 검색합니다.

  1. cd ~
  2. curl 'https://setup.ius.io/' -o setup-ius.sh

스크립트를 실행합니다.

  1. sudo bash setup-ius.sh

Apache로 mod_php 업그레이드

이 섹션에서는 Apache를 웹 서버로 사용하고 mod_php를 사용하여 PHP 코드를 실행하는 시스템의 업그레이드 프로세스를 설명합니다. 대신 Nginx 및 PHP-FPM을 실행 중인 경우 다음 섹션으로 건너뜁니다.

기존 PHP 패키지를 제거하여 시작하십시오. 메시지가 표시되면 y를 누르고 Enter를 눌러 계속하십시오.

  1. sudo yum remove php-cli mod_php php-common

IUS에서 새 PHP 7 패키지를 설치합니다. 다시 y를 누르고 프롬프트가 표시되면 Enter를 누르십시오.

  1. sudo yum install mod_php70u php70u-cli php70u-mysqlnd

마지막으로 Apache를 다시 시작하여 mod_php의 새 버전을 로드합니다.

  1. sudo apachectl restart

systemctl을 사용하여 httpd systemd 장치에서 관리하는 Apache의 상태를 확인할 수 있습니다.

  1. systemctl status httpd

Nginx로 PHP-FPM 업그레이드

이 섹션에서는 Nginx를 웹 서버로 사용하고 PHP-FPM을 사용하여 PHP 코드를 실행하는 시스템의 업그레이드 프로세스를 설명합니다. Apache 기반 시스템을 이미 업그레이드했다면 PHP 테스트 섹션으로 건너뛰십시오.

기존 PHP 패키지를 제거하여 시작하십시오. 메시지가 표시되면 y를 누르고 Enter를 눌러 계속하십시오.

  1. sudo yum remove php-fpm php-cli php-common

IUS에서 새 PHP 7 패키지를 설치합니다. 다시 y를 누르고 프롬프트가 표시되면 Enter를 누르십시오.

  1. sudo yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

설치가 완료되면 PHP-FPM과 Nginx 모두에 대해 몇 가지 구성을 변경해야 합니다. 구성된 대로 PHP-FPM은 로컬 TCP 소켓에서 연결을 수신하는 반면 Nginx는 파일 시스템의 경로에 매핑되는 Unix 도메인 소켓을 기대합니다.

PHP-FPM은 자식 프로세스의 여러 풀을 처리할 수 있습니다. 구성된 대로 www라는 단일 풀을 제공하며 이는 /etc/php-fpm.d/www.conf에 정의되어 있습니다. nano(또는 선호하는 텍스트 편집기)로 이 파일을 엽니다.

  1. sudo nano /etc/php-fpm.d/www.conf

listen = 127.0.0.1:9000이 포함된 블록을 찾으십시오. 이 블록은 PHP-FPM에게 포트 9000의 루프백 주소를 수신하도록 지시합니다. 세미콜론으로 이 행을 주석 처리하고 listen = /를 주석 해제합니다. run/php-fpm/www.sock 아래 몇 줄.

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock

다음으로 listen.acl_users 값이 포함된 블록을 찾고 listen.acl_users = nginx의 주석 처리를 제거합니다.

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =

종료하고 파일을 저장합니다. nano에서는 Ctrl-X를 눌러 종료하고, y를 눌러 확인하고, Enter를 눌러 덮어쓸 파일 이름을 확인하면 됩니다.

다음으로 Nginx가 올바른 소켓 경로를 사용하여 PHP 파일을 처리하는지 확인합니다. /etc/nginx/conf.d/default.conf를 열어 시작합니다.

  1. sudo nano /etc/nginx/conf.d/php-fpm.conf

php-fpm.conf는 다른 Nginx 구성 지시문에서 참조할 수 있는 업스트림을 정의합니다. 업스트림 블록 내에서 #를 사용하여 server 127.0.0.1:9000;을 주석 처리하고 server unix:/run/php-fpm/www를 주석 해제합니다. .삭;:

# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
        #server 127.0.0.1:9000;
        server unix:/run/php-fpm/www.sock;
}

종료하고 파일을 저장한 다음 /etc/nginx/conf.d/default.conf를 엽니다.

  1. sudo nano /etc/nginx/conf.d/default.conf

location ~ \\.php${로 시작하는 블록을 찾습니다. 이 블록 내에서 fastcgi_pass 지시문을 찾습니다. 이 줄을 주석 처리하거나 삭제하고 php-fpm.conf에 정의된 업스트림을 참조하는 fastcgi_pass php-fpm으로 바꿉니다.

  location ~ \.php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_pass php-fpm;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
  }

파일을 종료하고 저장한 다음, 새 구성 지시문이 적용되도록 PHP-FPM 및 Nginx를 다시 시작합니다.

  1. sudo systemctl restart php-fpm
  2. sudo systemctl restart nginx

systemctl을 사용하여 각 서비스의 상태를 확인할 수 있습니다.

  1. systemctl status php-fpm
  2. systemctl status nginx

PHP 테스트

웹 서버가 구성되고 새 패키지가 설치되면 PHP가 실행 중인지 확인할 수 있어야 합니다. 명령줄에서 설치된 PHP 버전을 확인하여 시작합니다.

  1. php -v
PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

웹 서버의 문서 루트에 테스트 파일을 만들 수도 있습니다. 위치는 서버 구성에 따라 다르지만 일반적으로 문서 루트는 다음 디렉토리 중 하나로 설정됩니다.

  • <코드>/var/www/html
  • <코드>/var/www/
  • <코드>/usr/share/nginx/html

nano를 사용하여 문서 루트에서 info.php라는 새 파일을 엽니다. 기본적으로 Apache에서는 다음과 같습니다.

  1. sudo nano /var/www/html/info.php

Nginx에서는 대신 다음을 사용할 수 있습니다.

  1. sudo nano /usr/share/nginx/html/info.php

다음 코드를 붙여넣습니다.

<?php
phpinfo();

편집기를 종료하고 info.php를 저장합니다. 이제 브라우저에서 다음 주소를 로드합니다.

http://server_domain_name_or_IP/info.php

실행 중인 버전과 구성이 나열된 PHP 7 정보 페이지가 표시되어야 합니다. 이를 다시 확인했으면 info.php를 삭제하는 것이 가장 안전합니다.

  1. sudo rm /var/www/html/info.php

이제 작동하는 PHP 7 설치가 있습니다. 여기에서 Erika Heidi의 공식 마이그레이션 가이드를 확인할 수 있습니다.