Обновление до 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 теперь должен быть правильно настроен.


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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.