Uaktualnij do 16.04. php7 nie działa w przeglądarce

69

Właśnie zaktualizowałem wersję z 14.10 do 16.04 i nie jestem pewien, jak skonfigurować PHP 7 w apache. Zmodyfikowałem plik php7.0.conf, aby odkomentować ostatnie linie, zrestartowałem apache2 i nie wprowadziłem żadnych zmian.

Czy muszę zmienić ustawienia apache2, aby umożliwić php?

PHP działa z wiersza poleceń, więc jestem pewien, że php jest poprawnie zainstalowany.

Dodatkowo pojawia się błąd na phpadmin, informujący, że brakuje mbstring.

David Wright
źródło
1
Działający interfejs CLI SAPI ( phppolecenie) jest prostopadły do ​​innych interfejsów SAP SAPI (apache2, FPM, CGI, ...), więc działający wiersz poleceń PHP nie mówi nic o działaniu PHP na serwerze HTTP.
oerdnj 24.04.16
2
Za brakujące mbstring wykonaj: sudo apt-get install php-mbstring(kto by pomyślał, prawda?)
oerdnj 24.04.16
Co oznacza „php7 nie działa w przeglądarce”? Mówisz o tym, że Apache się nie uruchamia? PHP nie jest językiem po stronie klienta.
Andrea Lazzarotto,
To naprawdę przygnębiające, widząc te wszystkie odpowiedzi kierujące użytkowników do włączenia mpm-prefork i mod-php. To ogromny krok wstecz.
Andrew Ensley,

Odpowiedzi:

81

Tak jak poprzednio, musisz zainstalować PHP dla Apache.

Z Przewodnika po serwerze :

sudo apt install php libapache2-mod-php

To polecenie zainstaluje PHP i moduł Apache 2 PHP. Po prostu skonfiguruj Apache jak poprzednio ( sudo a2enmod php7.0myślę, że włączy moduł).


Twój mbstringproblem jest podobny - musisz zainstalować to rozszerzenie:

sudo apt install php7.0-mbstring

W przypadku innych brakujących modułów trzeba będzie również zainstalować podobne rzeczy.

Thomas Ward
źródło
Moduł php powinien być domyślnie włączony podczas instalacji. Jeśli nie, to musi być pełne sudo a2enmod php7.0(a przynajmniej tak postanowiłem przez wyłączenie i ponowne włączenie na moim komputerze). Ciekawe, otrzymałem ten komunikat:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies
@DougSmythies Zakładam, że nie przeczytałeś tam, gdzie powiedziałem, że musisz włączyć moduł ...
Thomas Ward
1
Tak, zrobiłem i dlatego skomentowałem. sudo a2enmod phpnie zadziała, próbowałem. Jednak sudo a2enmod php7.0będzie działać.
Doug Smythies,
1
To powinno być oznaczone jako poprawna odpowiedź. Nowa instalacja Ubuntu 16.04 domyślnie nie obejmuje tego modułu apache2.
Selosindis 27.04.16
@Selosindis Absolutnie uzgodnione! Wciąż denerwujące jest to, że w Ubuntu 16.04 standardowy proces instalacji zmienił się w porównaniu do starszych wersji.
Sokrates,
40

Aby skonfigurować php7 do pracy z serwerem, musisz wykonać konfigurację:

1. Upewnij się, że usunąłeś wszelkie ślady php/php5

Otwórz terminal Ctrl+ Alt+ Ti:

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

Wyjście powinno nie zawierają żadnych php5.confalbo php5.load, ale jeśli tak się stanie, należy wykonać następujące czynności:

# 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

Teraz dodaj php7.0.confi php7.0.loadzamiast:

# 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

Dane wyjściowe ls -la php*powinny wyglądać następująco:

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

Po zajęciu się modułami przechodzimy teraz do /etc/apache2/conf-enabledkatalogu. Usuń również wszelkie ślady php / php5 tutajsudo rm <name>

W razie potrzeby wykonaj:

# 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

Dane wyjściowe ls -la php*powinny wyglądać następująco:

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. Ponowne uruchamianie Apache2

Przed ponownym uruchomieniem Apache wyczyść Apache, error.loga następnie uruchom ponownie:

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

Teraz sprawdź error.log, wydając cat /var/log/apache2/error.log | less(przeciąganie przez less umożliwia łatwe przewijanie w górę i w dół, qwyjście z wyjścia).

Jeśli twój error.logzawiera wiele (a dosłownie mam na myśli kupę ), niektóre z nich MIBS not foundwykonują następujące czynności:

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

Sprawdź ponownie, error.logże teraz powinno zawierać tylko 3 linie:

[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'

Twój Apache z php7.0 powinien być teraz poprawnie skonfigurowany.

Videonauth
źródło
2
Użyj poleceń a2enmodi a2dismodzamiast ręcznie majstrować przy linkach w mods-available/ mods-enabled(podobnie a2enconfi a2disconfdla conf-{available,enabled}).
mur
1
Poprawiłem moją odpowiedź zgodnie z twoimi danymi wejściowymi.
Videonauth,
Błahy z linkami jest szkodliwe jak a2enmodi a2dismodzapamiętać stan modułów w wewnętrznym rejestrze pakietu apache2, więc co / usuwania linków ręcznie może uczynić system złamany dla przyszłych uaktualnień jako skrypty uaktualniania patrzy na stan tej wewnętrznej bazie danych.
oerdnj 24.04.16
@ oerdnj: zrobienie omletu może rozbić jajka ... ;-)
Fabby
1
@David Wright - Być może próbujesz uruchomić skrypt PHP z katalogu użytkownika - są one domyślnie wyłączone. Jeśli tak, musisz otworzyć php7.0.conf i skomentować ostatnią część. Więcej tutaj devplant.net/2010/05/04/…
xcxc
12

Mam również ten problem.

Pomogło mi to usunąć wszystkie PHP i ponownie zainstalować php7.

Potrzebne było tylko:

sudo apt-get purge php*

php7 zostanie usunięty, a następnie ponownie zainstalowany:

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi  php7.0 libapache2-mod-php7.0
Tom Idar Wangberg
źródło
1
Próbowałem już kilka rzeczy wcześniej i ta metoda działa dla mnie. Dziękuję Ci!!!
Srikanth Ponnapalli
1
O MÓJ BOŻE. Uratowałeś mnie.
plhn 30.03.17
to jedyne rozwiązanie, które działało dla mnie. Twoje zdrowie!
geevee
Pomogło mi to, ponieważ po aktualizacji Ubuntu nie znalazłem php7.0-cgi w dostępnej wersji. Ale pamiętaj, że zrobienie tego sudo apt-get purge php*spowoduje usunięcie twojego phpMyAdmina, jeśli go masz.
Artur Czyżewski
8

Im mój przypadek nie tylko php nie działał, ale phpmyadmin również robiłem krok po kroku w ten sposób

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

A następnie:

gksu gedit /etc/apache2/apache2.conf

W ostatnim wierszu dodaję Include /etc/phpmyadmin/apache.conf

To rozwiązuje wszystkie problemy

Maciej
źródło
7

Rozwiązaniem, które znalazłem dla tego problemu, było domyślne ustawienie PHP.INI dla short_open_tag. Domyślnie jest to ustawione na „Off”. Mój kod PHP zaczął

   <?

zamiast

   <?php

Jeśli włączony, short_open_tag (zmieniając „Off” na „On” w moim php.ini) i resetuje serwer apache ( sudo service apache2 restart), a PHP wrócił do życia.

Patrick
źródło
OMMFG! Oczywiście byłby to ostatni komentarz z pozytywnymi opiniami, który w końcu dla mnie zadziałał! Dziękuję bardzo, @patrick !!!
hyperGeoMetric
0

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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Uwaga: powyższe jest wymagane, ponieważ libphp7.sodołączone do php-apachenie działa z mod_mpm_event, ale będzie działać mod_mpm_prefork zamiast tego. ( FS # 39218 )

W przeciwnym razie pojawi się następujący błąd:

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

Alternatywnie możesz użyć mod_proxy_fcgi(patrz Korzystanie z php-fpm i mod_proxy_fcgi poniżej ).

użytkownik539644
źródło
0

Ja również mogłem pomyślnie uruchamiać skrypty php z linii poleceń na Ubuntu 16.04, ale nie w żadnej przeglądarce. Próbując rozwiązać problem wyczyściłem swoje istniejące kopie zarówno php7.0, jak i apache2. Następnie przeinstalowałem zarówno z linii poleceń, jak i bibliotekę php apache2. Frustracja pojawiła się, gdy próbowałem uruchomić „a2enmod php7.0”, co poinformowało mnie, że moduł php7.0 nie istnieje, mimo że po raz kolejny byłem w stanie uruchomić skrypty php z linii poleceń. Instynkt się uruchomił. Otwierając Synaptic, odkryłem, że kiedy instalowałem bibliotekę php apache2 z wiersza poleceń, instalowałem tylko libapache2-mod-php7.0 i zapomniałem również zainstalować „wrapper”, libapache2-mod- php, bez którego ten pierwszy nie będzie działał.

Bill Wilken
źródło
1
Jak nazywa się „opakowanie”?
EKons,