16.04로 업그레이드하십시오. php7이 브라우저에서 작동하지 않습니다


69

방금 14.10에서 16.04로 업그레이드했으며 아파치에서 PHP 7을 구성하는 방법을 모르겠습니다. php7.0.conf 파일을 수정하여 마지막 행의 주석을 해제하고 apache2를 다시 시작했으며 변경하지 않았습니다.

PHP를 허용하기 위해 apache2 설정을 변경해야합니까?

PHP는 명령 줄에서 작동하므로 PHP가 올바르게 설치되어 있습니다.

또한 phpadmin에서 mbstring이 누락되었다는 오류가 발생합니다.


1
작업 CLI SAPI ( php명령)는 다른 PHP SAPI (apache2, FPM, CGI 등)와 직교하므로 작업 명령 행 PHP는 HTTP 서버에서 PHP 작업에 대해 아무 말도하지 않습니다.
oerdnj

2
누락 된 mbstring의 경우 : sudo apt-get install php-mbstring(누가 생각했을까요?)
oerdnj

"php7이 브라우저에서 작동하지 않습니다"는 무슨 뜻입니까? 아파치가 시작되지 않는 것에 대해 이야기하고 있습니까? PHP는 클라이언트 측 언어가 아닙니다.
Andrea Lazzarotto 2016 년

mpm-prefork 및 mod-php를 활성화하도록 사용자에게 지시하는 이러한 모든 답변을 보는 것은 정말 우울합니다. 이것은 거꾸로 한 걸음입니다.
앤드류 Ensley

답변:


81

이전과 마찬가지로 Apache 용 PHP를 설치해야합니다.

로부터 서버 가이드 :

sudo apt install php libapache2-mod-php

이 명령은 PHP와 Apache 2 PHP 모듈을 설치합니다. 이전과 같이 Apache를 구성하기 만하면됩니다 ( sudo a2enmod php7.0모듈을 켤 것입니다).


귀하의 mbstring문제는 유사하다 - 당신이 확장 기능을 설치해야합니다 :

sudo apt install php7.0-mbstring

누락 된 다른 모듈의 경우 비슷한 항목도 설치해야합니다.


PHP 모듈은 설치시 기본적으로 활성화되어 있어야합니다. 그렇지 않다면, 그것은 가득 차 있어야합니다 sudo a2enmod php7.0(또는 컴퓨터에서 비활성화하고 다시 활성화하여 결정했습니다). 나는 다음과 같은 메시지를 받았습니다.Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies

@DougSmythies 모듈을 활성화해야한다고 말한 곳을 읽지 않았다고 가정합니다.
Thomas Ward

1
네, 그렇기 때문에 제가 의견을 말한 것입니다. sudo a2enmod php작동하지 않을 것입니다. 그러나 sudo a2enmod php7.0작동합니다.
Doug Smythies

1
정답으로 표시해야합니다. Ubuntu 16.04 새로 설치에는 기본적으로이 apache2 모듈이 포함되어 있지 않습니다.
Selosindis

@Selosindis는 절대적으로 동의했다! 그럼에도 불구하고 Ubuntu 16.04에서는 표준 설치 프로세스가 이전 버전과 비교하여 변경되었습니다.
소크라테스

40

서버에서 php7이 실행되도록 구성하려면 몇 가지 구성을 수행해야합니다.

1. 흔적을 제거하십시오 php/php5

터미널 Ctrl+ Alt+를 열고 T다음을 수행하십시오.

cd /etc/apache2/mods-enabled
ls -la

출력은해야 하지 를 포함 할 php5.conf또는 php5.load, 그러나 않는 경우, 다음을 수행하십시오

# this is the proper way of disabling modules
sudo a2dismod php5

# run this only if the above command didn't remove the php5 sym-links
sudo rm php5.load
sudo rm php5.conf

이제 php7.0.confand php7.0.load를 추가하십시오 .

# this is the proper way of enabling modules
sudo a2enmod php7.0

# run this only if the above command didn't create the php7.0 sym-links
sudo ln -s php7.0.conf ../mods-available/php7.0.conf
sudo ln -s php7.0.load ../mods-available/php7.0.load

출력 ls -la php*은 다음과 같아야합니다.

lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.conf -> ../mods-available/php7.0.conf
lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.load -> ../mods-available/php7.0.load

모듈을 다루고 나면 이제 /etc/apache2/conf-enabled디렉토리로갑니다. php / php5의 흔적을 제거하십시오.sudo rm <name>

그런 다음 필요한 경우 다음을 수행하십시오.

# the proper way of enabling configs
sudo a2enconf php7.0-cgi
sudo a2enconf php7.0-fpm

# do those commands only if the above didn't work out
sudo ln -s php7.0-cgi.conf ../conf-available/php7.0-cgi.conf
sudo ln -s php7.0-fpm.conf ../conf-available/php7.0-fpm.conf

출력 ls -la php*은 다음과 같아야합니다.

lrwxrwxrwx 1 root root 33 Apr 21 17:00 php7.0-cgi.conf -> ../conf-available/php7.0-cgi.conf
lrwxrwxrwx 1 root root 33 Apr 21 17:01 php7.0-fpm.conf -> ../conf-available/php7.0-fpm.conf

2. Apache2 재시작

Apache를 다시 시작하기 전에 Apache를 정리 error.log한 다음 다시 시작하십시오.

sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

이제 error.log발행을 cat /var/log/apache2/error.log | less통해 점검하십시오 (낮은 간격으로 파이프를 사용하면 쉽게 위아래로 스크롤 q하고 출력을 종료 할 수 있습니다).

귀하의 error.log많은 (그리고 말 그대로 을 의미하는 )을 포함하는 경우 일부 MIBS not found는 다음을 수행합니다.

sudo apt install libsnmp-dev
sudo net-snmp-config --snmpconfpath
sudo apt-get install snmp snmp-mibs-downloader
sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

다시 확인 error.log하면 이제 3 줄만 포함해야합니다.

[Sat Apr 23 01:39:07.504005 2016] [mpm_prefork:notice] [pid 1647] AH00169: caught SIGTERM, shutting down
[Sat Apr 23 01:39:08.685774 2016] [mpm_prefork:notice] [pid 9590] AH00163: Apache/2.4.18 (Ubuntu) mod_perl/2.0.9 Perl/v5.22.1 configured -- resuming normal operations
[Sat Apr 23 01:39:08.685938 2016] [core:notice] [pid 9590] AH00094: Command line: '/usr/sbin/apache2'

php7.0을 사용하는 Apache가 이제 올바르게 구성되었습니다.


2
를 사용 a2enmod하고 a2dismod대신 수동으로 링크 땜질 명령 mods-available/ mods-enabled(유사하게, a2enconf그리고 a2disconf에 대한 conf-{available,enabled}).
muru

1
귀하의 의견에 따라 내 대답을 수정했습니다.
Videonauth

링크가있는 손보는는 같은 유해 a2enmod하고 a2dismod이렇게 링크를 수동으로 업그레이드 스크립트는이 내부 데이터베이스의 상태를 보이는 시스템이 향후 업그레이드를위한 파괴 할 수있는 / 제거하고, 내부 아파치 패키지 레지스트리에서 모듈의 상태를 기억합니다.
oerdnj

@oerdnj : 오믈렛을 만들면 계란이 깨질 수 있습니다 ... ;-)
Fabby

1
@David Wright-아마도 사용자 디렉토리에서 PHP 스크립트를 실행하려고 할 것입니다-이들은 기본적으로 비활성화되어 있습니다. 그렇다면 php7.0.conf를 열고 마지막 부분을 주석 처리해야합니다. 더 자세한 내용은 devplant.net/2010/05/04/…
xcxc

12

이 문제도 있습니다.

모든 PHP를 삭제하고 php7을 다시 설치하는 데 도움이되었습니다.

필요한 것은 다음과 같습니다.

sudo apt-get purge php*

php7은 나중에 다시 설치하기 위해 삭제됩니다.

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi  php7.0 libapache2-mod-php7.0

1
나는 전에 몇 가지를 시도했지만이 방법은 저에게 효과적입니다. 감사합니다!!!
Srikanth Ponnapalli

1
세상에 당신이 나를 구해주었습니다.
plhn

이것은 나를 위해 일한 유일한 솔루션입니다. 건배!
geevee

이것은 우분투 업그레이드 후 php7.0-cgi를 conf-avaliable에서 찾지 못했기 때문에 도움이되었습니다. 그러나 sudo apt-get purge php*phpMyAdmin이 있으면 제거하면 phpMyAdmin도 제거됩니다.
Artur Czyżewski

8

필자의 경우 PHP는 작동하지 않았지만 phpmyadmin도 단계별로 수행했습니다.

sudo apt install php libapache2-mod-php
sudo apt install php7.0-mbstring
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

그리고 나서 :

gksu gedit /etc/apache2/apache2.conf

마지막 줄에 내가 추가 Include /etc/phpmyadmin/apache.conf

그것은 모든 문제를 다룬다


7

이 문제에 대한 해결책은 short_open_tag에 대한 기본 PHP.INI 설정이었습니다. 기본적으로 'Off'로 설정되어 있습니다. 내 PHP 코드는

   <?

대신에

   <?php

short_open_tag를 활성화하면 (php.ini에서 'Off'를 'On'으로 변경하여) 아파치 서버 ( sudo service apache2 restart)를 재설정하면 PHP가 다시 활성화 됩니다.


OMMFG! 물론 그것은 마침내 나를 위해 일한 upvotes에 대한 마지막 의견 일 것입니다! 정말 감사합니다. 패트릭 !!!
hyperGeoMetric

0

https://wiki.archlinux.org/index.php/Apache_HTTP_Server

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

참고 : 때문에 위가, 필요 libphp7.so에 포함 된 php-apache작동하지 않습니다 mod_mpm_event,하지만 에만 작동합니다 mod_mpm_prefork 대신. ( FS # 39218 )

그렇지 않으면 다음과 같은 오류가 발생합니다.

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
AH00013: Pre-configuration failed
httpd.service: control process exited, code=exited status=1

대안으로 사용할 수 있습니다 mod_proxy_fcgi(아래의 php-fpm 및 mod_proxy_fcgi 사용 참조 ).


0

나도 우분투 16.04의 명령 줄에서 PHP 스크립트를 성공적으로 실행할 수는 있지만 어떤 브라우저에서도 실행할 수는 없습니다. 문제를 해결하기 위해 기존의 php7.0 및 apache2 사본을 제거했습니다. 그 후 apache2의 php 라이브러리뿐만 아니라 명령 줄에서 모두 다시 설치했습니다. "a2enmod php7.0"을 실행하려고했을 때 좌절감이 뒤따 랐는데, 명령 행에서 PHP 스크립트를 다시 실행할 수 있다는 사실에도 불구하고 php7.0 모듈이 존재하지 않는다는 사실을 알려주었습니다. 본능이 시작되었습니다. Synaptic을 시작하면서 명령 행에서 apache2 php 라이브러리를 설치할 때 libapache2-mod-php7.0 만 설치하고 "래퍼"libapache2-mod-를 설치하지 않은 것을 발견했습니다. PHP가 없으면 전자가 작동하지 않습니다.


1
"래퍼"의 이름은 무엇입니까?
EKons
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.