우분투 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 시스템에 대한 가이드입니다. (적어도 내 설정에서는) 몇 가지 누락된 사항이 있으므로 다음 단계를 수행합니다.
소스에서 PHP를 빌드합니다. 단계 에서
./configure
를 사용합니다--with-apxs2
. 그러면 공유 Apache 2 핸들러 모듈이 빌드됩니다.경로에 명령이 정의 되어 있는지 확인하거나
apxs
해당 경로를 옵션 값(예:--with-apxs2=/path/to/apxs
)으로 지정하십시오.예를 들어, 시스템 전반에 걸쳐 Apache를 설치하고 이 명령도 (예: 로컬 환경에) 설치하려는 경우 Fedora 및 그 파생 제품에 다음과 같이 설치할 수 있습니다.
sudo dnf install httpd-devel
빌드가 완료된 후(예:
make
또는 이후make test
) 실행합니다make install
(아마도 루트로). 분명히 이것은 지정한 경로(즉,--prefix
)에 PHP를 설치합니다.PHP를 설치하기 직전에 수행되는 작업은 옵션 때문에
--with-apxs2
PHP 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-fpm
PHP5의 경우 php5_module
및 mod_php5
; PHP7의 경우 및 이고 php7_module
, mod_php7
PHP8의 경우 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 httpd
centos7에서 사용했습니다.