Apache2가 사용하는 PHP 버전을 변경하는 방법은 무엇입니까?

Apache2가 사용하는 PHP 버전을 변경하는 방법은 무엇입니까?

우분투 10.04, MySQL 5.1, 아파치 2.2, PHP 5.2/5.3:

방금 CRM 애플리케이션에 잘못된 버전의 PHP를 사용하고 있음을 발견했습니다. phpinfo()Apache2가 무엇을 사용하고 있는지 알려주는 간단한 스크립트를 만드는 방법을 알아낸 후에는 php.ini내 웹 서버가 내가 원하는 PHP를 사용하도록 변경해 보았습니다. 글쎄, 이건 내 문제야. 어떻게 해야 할지 잘 모르겠습니다.

여기에 원하는 PHP 버전을 컴파일했습니다 /etc.

/etc/php-5.2.8/

그 안에는 PHP에서 사용할 수 있도록 php.ini-recommended일부 변경하고 이름을 바꾼 파일이 있었습니다 . php.ini그러나 브라우저를 열고 내 기록을 지우고 해당 http://localhost<CRM dir>/install.php주소로 이동했을 때 마법사는 여전히 올바른 버전의 PHP를 사용하고 있지 않다고 말합니다.

기반 이 게시물스크립트를 실행한 후 표시되는 PHP 버전을 변경하려면 어떻게 해야 합니까 test.php? 즉, phpinfo()PHP 5.3.2를 실행하고 있지만 /etc.

답변1

서버에 따라 PHP가 아닌 Apache를 살펴봐야 합니다.

(RHEL/CentOS의 경우) 다음을 살펴보세요./etc/httpd/conf.d/php.ini

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated web pages.
#
LoadModule php5_module modules/libphp5.so
#
# Causes the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

PHP 모듈이 modules/libphp5.so.

AddHandler php5-script .php확장자가 .인 모든 파일에서 PHP를 실행하도록 Apache에 지시합니다 .php.

RPM 기반 OS를 사용하는 경우 현재 PHP 버전을 제거하고(가능한 경우) 찾고 있는 버전을 다시 설치하는 것이 더 쉬울 것입니다.

rpm -qa | grep php

현재 설치된 PHP 버전이 표시됩니다.

답변2

이미 다른 버전의 PHP를 설치한 경우 Apache에서 사용하는 php* 모듈만 변경하면 됩니다.

예를 들어, 저는 php5와 php7.0을 가지고 있습니다. Apache에서 php7.0을 사용하려면 해당 모듈을 활성화하고 php5 모듈을 비활성화하기만 하면 됩니다.

sudo a2dismod php5
sudo a2enmod php7.0

답변3

새 PHP 버전을 설치하고 Apache에 이를 사용하도록 지시하는 두 가지 주요 방법이 mod_php있습니다 php-fpm.

메모:선호되는 방법은 이며 php-fpm, 많은 새로운 배포판(Fedora 포함)에서는 기본적으로 이 방법을 사용하고 있습니다.

PHP를 Apache SAPI 모듈로 설치

여기공식 문서에서 Unix 시스템에 대한 가이드입니다. (적어도 내 설정에서는) 몇 가지 누락된 사항이 있으므로 다음 단계를 수행합니다.

  1. 소스에서 PHP를 빌드합니다. 단계 에서 ./configure를 사용합니다 --with-apxs2. 그러면 공유 Apache 2 핸들러 모듈이 빌드됩니다.

    경로에 명령이 정의 되어 있는지 확인하거나 apxs해당 경로를 옵션 값(예: --with-apxs2=/path/to/apxs)으로 지정하십시오.

    예를 들어, 시스템 전반에 걸쳐 Apache를 설치하고 이 명령도 (예: 로컬 환경에) 설치하려는 경우 Fedora 및 그 파생 제품에 다음과 같이 설치할 수 있습니다.

    sudo dnf install httpd-devel
    
  2. 빌드가 완료된 후(예: make또는 이후 make test) 실행합니다 make install(아마도 루트로). 분명히 이것은 지정한 경로(즉, --prefix)에 PHP를 설치합니다.

    PHP를 설치하기 직전에 수행되는 작업은 옵션 때문에 --with-apxs2PHP apache2handler SAPI 모듈을 설치하는 것입니다. 설치된 PHP 버전에 따라 Apache 구성 파일에 다음 행 중 하나를 추가하여 공유 객체(예: /usr/lib64/httpd/modules/libphp.so)를 준비하고 모듈(예: )을 활성화합니다 (이 행은 "동적 공유" ​​섹션 아래에 삽입됩니다). /etc/httpd/conf/httpd.conf개체(DSO) 지원'):

    # In the case of PHP8
    LoadModule php_module           /usr/lib64/httpd/modules/libphp.so
    
    # In the case of PHP7
    LoadModule php7_module          /usr/lib64/httpd/modules/libphp.so
    

    메모:PHP 버전, 특히 주요 버전을 켜는 동안 사용 가능한 PHP 버전이 하나만 있는지 확인하십시오 LoadModule. 그렇지 않으면 Apache 서버가 시작을 거부합니다.

PHP를 PHP-FPM(FastCGI 프로세스 관리자)으로 설치

미정. :)

최종 단계

PHP 8.0 이상 추가 단계

배포판이 아직 PHP8을 지원하지 않고(예: Fedora 34) 패키지 관리자에서 Apache2를 설치한 경우 한 단계를 더 수행해야 합니다.

문제는 PHP 8.0부터 Apache2가 이전과 다른 SAPI 모듈 식별자를 사용한다는 것입니다. 이러한 식별자는 구성 파일에서 mod_php또는 를 사용하고 있는지 여부를 감지하는 데 사용됩니다 . php-fpmPHP5의 경우 php5_modulemod_php5; PHP7의 경우 및 이고 php7_module, mod_php7PHP8의 경우 php_module및 입니다 mod_php.

이 경우 Apache2 구성 디렉터리(예 /etc/httpd: )로 이동하여 파일 편집을 시작합니다 conf.d/php.conf. 거기에는 두 개의 섹션이 있습니다 IfModule. 하나는 를 php-fpm사용하지 않는 경우 활성화하기 위한 mod_php것이고, 다른 하나는 mod_php이를 사용하는 경우 활성화하기 위한 것입니다(예: LoadModule구성의 어딘가에서 사용). PHP8도 포함하려면 이러한 조건을 업데이트해야 합니다.

예를 들어 다음을 고려해보세요.

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable PHP-FPM configuration
  </IfModule>
</IfModule>

다음과 같은 섹션을 하나 더 추가하여 핵심 구성을 둘러싸야 합니다 IfModule.

    <IfModule !mod_php.c>
      # Enable PHP-FPM configuration
    </IfModule>

Enabler 구성 섹션에서도 동일한 작업을 수행합니다 mod_php.

마지막 단계

Apache 서비스를 다시 시작합니다.

service httpd restart

이제 phpinfo()방금 설치한 새 PHP 버전이 표시됩니다. 이제 당신은 행복해야합니다. :)

답변4

버전 7.3으로 업그레이드했는데도 phpinfo()가 버전 7.0을 표시하는 것과 동일한 문제가 있었습니다. 그리고 내가 그래야만 했다는 사실이 밝혀졌어아파치를 다시 시작.

나는 sudo systemctl restart httpdcentos7에서 사용했습니다.

관련 정보