Обновление до 16.04. php7 не работает в браузере

61

Я только что обновил с 14.10 по 16.04 и не уверен, как настроить PHP 7 в apache. Я изменил файл php7.0.conf, чтобы раскомментировать последние строки, перезапустил apache2 и не изменил.

Нужно ли мне изменить настройку apache2, чтобы разрешить php?

PHP работает из командной строки, поэтому я уверен, что php правильно установлен.

Кроме того, я получаю сообщение об ошибке на phpadmin, говорящей, что mbstring отсутствует.

    
задан David Wright 23.04.2016 в 00:54
источник

7 ответов

72

Как и раньше, вам нужно установить PHP для Apache.

В сервере :

sudo apt install php libapache2-mod-php

Эта команда установит PHP и модуль Apache 2 PHP. Просто настройте Apache как раньше ( sudo a2enmod php7.0 , я думаю, включит модуль).

Проблема mbstring аналогична - вам нужно установить это расширение:

sudo apt install php7.0-mbstring

Для других отсутствующих модулей будут также аналогичные вещи, которые необходимо установить.

    
ответ дан Thomas Ward 23.04.2016 в 01:10
37

Чтобы настроить 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.conf и 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'

Теперь ваш Apache с php7.0 должен быть правильно настроен.

    
ответ дан Videonauth 23.04.2016 в 01:40
9

У меня тоже есть эта проблема.

Это помогло мне удалить все 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
    
ответ дан Tom Idar Wangberg 14.08.2016 в 01:21
7

В моем случае не только 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

Это соглашение со всеми проблемами

    
ответ дан Maciej 05.05.2016 в 15:11
7

Решение, которое я нашел для этой проблемы, было установкой PHP.INI по умолчанию для short_open_tag. По умолчанию установлено значение «Выкл.». Мой PHP-код начинался с

   <?

вместо

   <?php

Если включен short_open_tag (изменив «Отключить» на «Вкл.» на моем php.ini) и сбросьте сервер Apache ( sudo service apache2 restart ), а PHP выскочил обратно.

    
ответ дан patrick 27.10.2016 в 17:07
0

Ссылка

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 ниже ).

    
ответ дан user539644 04.05.2016 в 22:31
0

Я тоже мог успешно запускать php-скрипты из командной строки на Ubuntu 16.04, но не в любом браузере. В попытке решить проблему я очистил свои существующие копии как php7.0, так и apache2. После этого я переустановил как из командной строки, так и в php-библиотеку apache2. Разочарование последовало, когда я попытался запустить «a2enmod php7.0», который сообщил мне, что модуль php7.0 не существует, несмотря на то, что я снова смог запустить php-скрипты из командной строки. Инстинкт начался. Открывая Synaptic, я обнаружил, что когда я установил библиотеку apache2 php из командной строки, я установил только libapache2-mod-php7.0 и забыл также установить «обертку», libapache2-mod- php, без которого первое не будет функционировать.     

ответ дан Bill Wilken 02.09.2016 в 19:43