Vraag Upgrade naar 16.04. php7 werkt niet in de browser


Ik heb zojuist een upgrade uitgevoerd van 14.10 naar 16.04 en weet niet zeker hoe ik PHP 7 in apache moet configureren. Ik heb het php7.0.conf-bestand gewijzigd om de laatste regels ongedaan te maken, apache2 opnieuw opgestart en geen wijziging aangebracht.

Moet ik de apache2-instelling wijzigen om php toe te staan?

PHP werkt vanaf de opdrachtregel, dus ik weet zeker dat de php correct is geïnstalleerd.

Bovendien krijg ik een foutmelding op phpadmin dat de mbstring ontbreekt.


65
2018-04-22 22:54


oorsprong


Werkende CLI SAPI (de php command) is orthogonaal ten opzichte van de andere PHP SAPI's (apache2, FPM, CGI, ...), dus werkende opdrachtregel PHP zegt niets over het werken met PHP op de HTTP-server. - oerdnj
Voor ontbrekende mbstring doen: sudo apt-get install php-mbstring (wie had dat gedacht, toch?) - oerdnj
Wat betekent "php7 werkt niet in browser"? Heb je het over het niet starten van Apache? PHP is geen client-side taal. - Andrea Lazzarotto
Het is echt deprimerend om al deze antwoorden te zien die gebruikers aansturen om mpm-prefork en mod-php in te schakelen. Dit is een enorme stap terug. - Andrew Ensley


antwoorden:


Net als voorheen moet je PHP voor Apache installeren.

Van de Serverhandleiding:

sudo apt install php libapache2-mod-php

Die opdracht installeert PHP en de Apache 2 PHP-module. Configureer Apache zoals eerder (sudo a2enmod php7.0, Denk ik, zal de module inschakelen).


Jouw mbstring probleem is vergelijkbaar - u moet die extensie installeren:

sudo apt install php7.0-mbstring

Voor andere ontbrekende modules zullen er vergelijkbare dingen zijn om ook te installeren.


78
2018-04-22 23:10



De php-module moet standaard worden ingeschakeld tijdens de installatie. Zo niet, dan moet het vol zijn sudo a2enmod php7.0 (of zo heb ik vastgesteld door het uitschakelen en opnieuw inschakelen op mijn computer.) interessant, ik kreeg dit bericht: Considering conflict php5 for php7.0: Enabling module php7.0. - Doug Smythies
@DougSmythies Ik neem aan dat je niet hebt gelezen waar ik zei dat je de module moest inschakelen ... - Thomas Ward♦
Ja, dat deed ik, daarom heb ik de opmerking gemaakt. sudo a2enmod php zal niet werken, ik heb het geprobeerd. Echter sudo a2enmod php7.0 zal werken. - Doug Smythies
Dit moet worden gemarkeerd als het juiste antwoord. Ubuntu 16.04 verse installatie bevat standaard niet deze apache2-module. - Selosindis
@Selosindis Absoluut akkoord! Toch irritant, dat met Ubuntu 16.04 het standaard installatieproces veranderde in vergelijking met oudere versies. - Socrates


Als u php7 wilt configureren voor gebruik met uw server, moet u enige configuratie uitvoeren:

1. Zorg ervoor dat u sporen verwijdert van php/php5

Open een terminal Ctrl+alt+T en:

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

De uitvoer zou moeten niet bevatten een php5.conf of php5.load, maar als dat het geval is, doet u het volgende:

# 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

Voeg nu de php7.0.conf en php7.0.load in plaats daarvan:

# 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

De uitvoer van ls -la php* zou er als volgt uit moeten zien:

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

Na het omgaan met de modules komen we nu bij de /etc/apache2/conf-enabled directory. Verwijder hier ook alle sporen van php / php5 sudo rm <name> 

Doe dan, indien nodig:

# 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

De uitvoer van ls -la php* zou er als volgt uit moeten zien:

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 herstarten

Voordat je Apache herstart, moet je ervoor zorgen dat je de Apache opruimt error.log herstart dan:

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

Controleer nu de error.log door uit te geven cat /var/log/apache2/error.log | less (Door minder door te bladeren, kunt u eenvoudig omhoog en omlaag scrollen, q verlaat de uitvoer).

Als jouw error.log bevat veel (en ik bedoel letterlijk een hoop van sommige MIBS not found doe het volgende:

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

Controleer opnieuw de error.log het zou nu slechts 3 regels moeten bevatten:

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

Uw Apache met php7.0 zou nu correct moeten zijn geconfigureerd.


39
2018-04-22 23:40



Gebruik de a2enmod en a2dismod opdrachten in plaats van handmatig te knutselen met links in mods-available/mods-enabled (Op dezelfde manier, a2enconf en a2disconf voor conf-{available,enabled}). - muru
Herzien van mijn antwoord op basis van uw inbreng. - Videonauth
Het gehannes met links is schadelijk als het a2enmod en a2dismod onthoud de status van de modules in het interne apache2-pakketregister, dus het handmatig maken / verwijderen van de links kan uw systeem kapot maken voor toekomstige upgrades, omdat de upgradescripts de status van deze interne database bekijken. - oerdnj
@oerdnj: een omelet maken kan eieren breken ... ;-) - Fabby
@David Wright - Misschien probeer je PHP-script uit de gebruikersdirectory uit te voeren - deze zijn standaard uitgeschakeld. Als dat het geval is, moet je php7.0.conf openen en het laatste deel een commentaar geven. Meer hier devplant.net/2010/05/04/... - xcxc


Ik heb dit probleem ook.

Het heeft me geholpen om alle PHP te verwijderen en php7 opnieuw te installeren.

Het enige dat nodig was, was:

sudo apt-get purge php*

php7 wordt verwijderd, daarna alleen om opnieuw te installeren:

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

11
2017-08-13 23:21



Ik heb al meerdere dingen geprobeerd en deze methode werkt voor mij. Dank je!!! - Srikanth Ponnapalli
OMG. Je hebt me gered. - plhn
dit is de enige oplossing die voor mij werkte. cheers! - geevee


In mijn geval werkte niet alleen de php niet maar ook phpmyadmin deed ik stap voor stap zoals dat

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

En dan om:

gksu gedit /etc/apache2/apache2.conf

In de laatste regel voeg ik toe Include /etc/phpmyadmin/apache.conf

Dat maakt een deal met alle problemen


7
2018-05-05 13:11





De oplossing die ik heb gevonden voor dit probleem was de standaard PHP.INI-instelling voor short_open_tag. Standaard staat dit op 'Uit'. Mijn PHP-code is begonnen met

   <?

in plaats van

   <?php

Indien ingeschakeld, de short_open_tag (door in mijn php.ini 'Uit' in 'Aan' te veranderen) en de apache-server opnieuw in te stellen (sudo service apache2 restart) en PHP kwam levend terug.


7
2017-10-27 15:07



OMMFG! Natuurlijk zou het de allerlaatste opmerking met upvotes zijn die eindelijk voor mij werkte! Dank je wel, veel geduld, @patrick !!! - hyperGeoMetric


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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Opmerking: het bovenstaande is vereist, omdat libphp7.so meegeleverd met php-apache werkt niet met mod_mpm_event, maar zal alleen werken  mod_mpm_prefork in plaats daarvan. (FS # 39218)

Anders krijg je de volgende foutmelding:

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

Als alternatief kunt u gebruiken mod_proxy_fcgi (zien Met behulp van php-fpm en mod_proxy_fcgi hieronder).


0
2018-05-04 20:31





Ik kon ook php-scripts met succes uitvoeren vanaf de opdrachtregel op Ubuntu 16.04, maar niet in een browser. In een poging om het probleem op te lossen heb ik mijn bestaande kopieën van zowel php7.0 als apache2 gewist. Daarna installeerde ik beide opnieuw vanaf de opdrachtregel, inclusief de php-bibliotheek van apache2. Frustratie volgde toen ik probeerde "a2enmod php7.0" uit te voeren, wat me liet weten dat de php7.0-module niet bestond ondanks het feit dat ik opnieuw php-scripts vanaf de opdrachtregel kon uitvoeren. Het instinct begon. Toen ik Synaptic opende, ontdekte ik dat toen ik de apache-bibliotheek van apache2 installeerde vanaf de opdrachtregel, ik alleen libapache2-mod-php7.0 installeerde en vergeten was ook de "wrapper" te installeren, libapache2-mod- php, zonder welke de eerste niet zal werken.


0
2017-09-02 17:43



Wat is de naam van de "wrapper"? - EKons