Обновление до 16.04. php7 не работает в браузере
Я только что обновился с 14.10 до 16.04 и не уверен, как настроить PHP 7 в apache. Я изменил файл php7.0.conf, чтобы раскомментировать последние строки, перезапустил apache2 и без изменений.
Нужно ли изменить настройку apache2, чтобы разрешить php?
PHP работает из командной строки, поэтому я уверен, что php установлен правильно.
Кроме того, я получаю сообщение об ошибке на phpadmin о том, что mbstring отсутствует.
7 ответов
Как и раньше, вам нужно установить 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
Для других отсутствующих модулей также будут установлены аналогичные вещи.
Чтобы настроить 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 теперь должен быть правильно настроен.
У меня тоже есть эта проблема.
Это помогло мне удалить весь 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
В моем случае не только 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
Что договориться со всеми проблемами
Решение, которое я нашел для этой проблемы, было установкой PHP.INI по умолчанию для short_open_tag. По умолчанию установлено значение "Выкл.". Мой PHP-код начался с
<?
вместо
<?php
Если включен short_open_tag (путем изменения "Off" на "On" в моем php.ini) и перезагрузить сервер apache (sudo service apache2 restart
) и PHP вернулся живым.
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 ниже).
Я тоже мог успешно запускать 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, без которого первый не будет функционировать.