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

69

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

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

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

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

Дэвид Райт
источник
1
Рабочий CLI SAPI ( phpкоманда) ортогонален другим PHP SAPI (apache2, FPM, CGI, ...), поэтому рабочая командная строка PHP ничего не говорит о работе PHP на HTTP-сервере.
oerdnj
2
За отсутствующую mbstring сделайте: sudo apt-get install php-mbstring(кто бы мог подумать, верно?)
oerdnj
Что означает «php7 не работает в браузере»? Вы говорите, что Apache не запускается? PHP не является клиентским языком.
Андреа Лаззаротто
Очень печально видеть, что все эти ответы заставляют пользователей включать mpm-prefork и mod-php. Это огромный шаг назад.
Эндрю Энсли

Ответы:

81

Как и раньше, вам нужно установить 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

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

Томас Уорд
источник
Модуль php должен быть включен по умолчанию при установке. Если нет, то это должно быть sudo a2enmod php7.0интересно (или так я определил, отключив и повторно включив на своем компьютере). Интересно, я получил это сообщение:Considering conflict php5 for php7.0: Enabling module php7.0.
Даг Смитис
@DougSmythies Я полагаю, вы не читали, где я сказал, что вы должны включить модуль ...
Томас Уорд
1
Да, я сделал, поэтому я сделал комментарий. sudo a2enmod phpне получится, я попробовал. Однако sudo a2enmod php7.0будет работать.
Даг Смитис
1
Это должно быть помечено как правильный ответ. Свежая установка Ubuntu 16.04 не включает этот модуль apache2 по умолчанию.
Селосиндис
@ 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.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
источник
2
Используйте a2enmodи a2dismodкоманды вместо того , чтобы вручную мастерить со ссылками на mods-available/ mods-enabled(аналогично, a2enconfи a2disconfдля conf-{available,enabled}).
Муру
1
Пересмотрел мой ответ в соответствии с вашим вкладом.
Видеонавт
Пустячный со ссылками вреден , как a2enmodи a2dismodзапомнить состояние модулей во внутреннем реестре apache2 пакета, так что делает / удаление ссылки вручную может сделать вашу систему сломана для будущих обновлений , поскольку сценарии обновления смотрит на состояние этой внутренней базы данных.
oerdnj
@oerdnj: приготовление омлета может разбить яйца ... ;-)
Fabby
1
@ Дэвид Райт - Возможно, вы пытаетесь запустить скрипт 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
Я пробовал несколько вещей раньше, и этот метод работает для меня. Спасибо!!!
Срикант Поннапалли,
1
О, МОЙ БОГ. Вы спасли меня.
PLN
это единственное решение, которое сработало для меня. ура!
Дживи
Это помогло мне, потому что после обновления Ubuntu я не нашел php7.0-cgi в conf-avaliable. НО имейте в виду, что выполнение sudo apt-get purge php*удалит ваш phpMyAdmin также, если у вас есть.
Артур Чижевский
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

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

   <?

вместо

   <?php

Если включен short_open_tag (путем изменения «Выкл.» На «Вкл» в моем php.ini) и сбросить сервер apache ( sudo service apache2 restart) и PHP вернется обратно живым.

Патрик
источник
OMMFG! Конечно, это был бы последний комментарий с отзывами, который наконец-то сработал для меня! Большое спасибо, @patrick !!!
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 ниже ).

user539644
источник
0

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

Билл Уилкен
источник
1
Как называется «обертка»?
EKons