Оновлення до 16.04. php7 не працює в браузері


69

Я щойно оновив з 14.10 до 16.04 і не знаю, як налаштувати PHP 7 в апачі. Я змінив файл 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 та модуль PHP Apache 2. Просто налаштуйте 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.
Doug Smythies

@DougSmythies Я припускаю, що ти не читав, де я сказав, що ти повинен включити модуль ...
Thomas Ward

1
Так, я це зробив, тому я і зробив коментар. sudo a2enmod phpне вийде, я спробував. Однак sudo a2enmod php7.0буде працювати.
Doug Smythies

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
Переглянув мою відповідь відповідно до ваших даних.
Videonauth

Дріб'язковий з посиланнями шкідливий , як a2enmodі a2dismodзапам'ятати стан модулів у внутрішньому реєстрі apache2 пакета, так що робить / видалення посилання вручну може зробити вашу систему зламана для майбутніх оновлень , оскільки сценарії поновлення дивиться на стан цієї внутрішньої бази даних.
oerdnj

@oerdnj: виготовлення омлету може зламати яйця ... ;-)
Fabby

1
@David Wright - Можливо, ви намагаєтеся запустити скрипт 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
О БОЖЕ МІЙ. Ти врятував мене.
plhn

це єдине рішення, яке працювало на мене. ура!
geevee

Це допомогло мені, оскільки після оновлення Ubuntu я не знайшов php7.0-cgi в конфіденційному стані. Але майте на увазі, що це 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! Звичайно, це був би останній коментар з обновками, які нарешті спрацювали для мене! Дякую тобі mf, @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, я виявив, що встановивши бібліотеку apache2 php з командного рядка, я встановив лише libapache2-mod-php7.0, і забув також встановити "обгортку", libapache2-mod- php, без якого колишній не буде функціонувати.


1
Як називається «обгортка»?
EKons
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.