PHP відображається як текст після оновлення Ubuntu 16.04


20

Apache надає файли PHP у вигляді тексту після оновлення Ubuntu 16.04.

Apache встановлений і працює. PHP7 працює. Коли я виконую таку команду, я отримую правильний вихід:

php -r 'echo "\n\nYour PHP installation is working fine.\n\n\n";'

Однак, коли я отримую доступ до http: //localhost/info.php або будь-якого іншого файлу php, я отримую вміст файлу замість сторінки.

Більшість допомоги в Інтернеті призначена для старих версій і Ubuntu, і PHP, тому я не впевнений, надійні вони чи ні.

ОНОВЛЕННЯ: Apache не запуститься після встановлення libapache2-mod-php7.0 та включення php7.0. Дивіться вихід:

douglas@douglas-acer:~$ sudo service apache2 restart
douglas@douglas-acer:~$ sudo apt-get install libapache2-mod-php
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  libapache2-mod-php
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/2.960 B of archives.
After this operation, 15,4 kB of additional disk space will be used.
Selecting previously unselected package libapache2-mod-php.
(Reading database ... 263897 files and directories currently installed.)
Preparing to unpack .../libapache2-mod-php_1%3a7.0+35ubuntu6_all.deb ...
Unpacking libapache2-mod-php (1:7.0+35ubuntu6) ...
Setting up libapache2-mod-php (1:7.0+35ubuntu6) ...
douglas@douglas-acer:~$ sudo service apache2 restart
douglas@douglas-acer:~$ sudo a2enmod php7.0
Considering conflict php5 for php7.0:
Enabling module php7.0.
To activate the new configuration, you need to run:
  service apache2 restart
douglas@douglas-acer:~$ sudo service apache2 restart
Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.
douglas@douglas-acer:~$ sudo apt-get purge php5
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'php5' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Вихід systemctl status apache2.service:

● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: exit-code) since Dom 2016-04-24 08:21:35 BRT; 14s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 9216 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)

Abr 24 08:21:35 douglas-acer apache2[9216]:  * The apache2 configtest failed.
Abr 24 08:21:35 douglas-acer apache2[9216]: Output of config test was:
Abr 24 08:21:35 douglas-acer apache2[9216]: [Sun Apr 24 08:21:35.235583 2016] [:crit] [pid 9226:tid 140666367190912] Apache is running a threade
Abr 24 08:21:35 douglas-acer apache2[9216]: AH00013: Pre-configuration failed
Abr 24 08:21:35 douglas-acer apache2[9216]: Action 'configtest' failed.
Abr 24 08:21:35 douglas-acer apache2[9216]: The Apache error log may have more information.
Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Control process exited, code=exited status=1
Abr 24 08:21:35 douglas-acer systemd[1]: Failed to start LSB: Apache2 web server.
Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Unit entered failed state.
Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Failed with result 'exit-code'.

Вихід journalctl -xe

-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit apache2.service has finished shutting down.
Abr 24 08:37:59 douglas-acer systemd[1]: Starting LSB: Apache2 web server...
-- Subject: Unit apache2.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit apache2.service has begun starting up.
Abr 24 08:37:59 douglas-acer apache2[10261]:  * Starting Apache httpd web server apache2
Abr 24 08:37:59 douglas-acer apache2[10261]:  *
Abr 24 08:37:59 douglas-acer apache2[10261]:  * The apache2 configtest failed.
Abr 24 08:37:59 douglas-acer apache2[10261]: Output of config test was:
Abr 24 08:37:59 douglas-acer apache2[10261]: [Sun Apr 24 08:37:59.748900 2016] [:crit] [pid 10271:tid 139911432607616] Apache is running a threa
Abr 24 08:37:59 douglas-acer apache2[10261]: AH00013: Pre-configuration failed
Abr 24 08:37:59 douglas-acer apache2[10261]: Action 'configtest' failed.
Abr 24 08:37:59 douglas-acer apache2[10261]: The Apache error log may have more information.
Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Control process exited, code=exited status=1
Abr 24 08:37:59 douglas-acer systemd[1]: Failed to start LSB: Apache2 web server.
-- Subject: Unit apache2.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit apache2.service has failed.
-- 
-- The result is failed.
Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Unit entered failed state.
Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Failed with result 'exit-code'.
Abr 24 08:37:59 douglas-acer sudo[10258]: pam_unix(sudo:session): session closed for user root
Abr 24 08:38:02 douglas-acer sudo[10276]:  douglas : TTY=pts/18 ; PWD=/home/douglas ; USER=root ; COMMAND=/bin/journalctl -xe
Abr 24 08:38:02 douglas-acer sudo[10276]: pam_unix(sudo:session): session opened for user root by (uid=0)
Abr 24 08:38:38 douglas-acer sudo[10276]: pam_unix(sudo:session): session closed for user root
Abr 24 08:39:01 douglas-acer CRON[10297]: pam_unix(cron:session): session opened for user root by (uid=0)
Abr 24 08:39:01 douglas-acer CRON[10299]: (root) CMD (  [ -x /usr/lib/php5/sessionclean ] && /usr/lib/php5/sessionclean)
Abr 24 08:39:01 douglas-acer CRON[10297]: pam_unix(cron:session): session closed for user root
Abr 24 08:39:01 douglas-acer CRON[10298]: pam_unix(cron:session): session opened for user root by (uid=0)
Abr 24 08:39:01 douglas-acer CRON[10300]: (root) CMD (  [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean)
Abr 24 08:39:02 douglas-acer CRON[10298]: pam_unix(cron:session): session closed for user root
Abr 24 08:39:51 douglas-acer sudo[10122]: pam_unix(sudo:session): session closed for user root
Abr 24 08:39:53 douglas-acer sudo[10368]:  douglas : TTY=pts/5 ; PWD=/home/douglas ; USER=root ; COMMAND=/bin/journalctl -xe
Abr 24 08:39:53 douglas-acer sudo[10368]: pam_unix(sudo:session): session opened for user root by (uid=0) 

Щодо помилки, Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHPя знайшов допомогу в https://wiki.archlinux.org/index.php/Apache_HTTP_Server щодо цієї проблеми, однак шляхи до файлів не відповідали тим, які були в Ubuntu, тому я не намагався застосувати рекомендується виправити.

Відповіді:


27

phpКоманда надається php7.0-cliпакет на Ubuntu 16.04. Запуск CLI є ортогональним для конфігурації веб-сервера.

Вам потрібно встановити та налаштувати один із веб-SAPI - apache2, fpm або cgi. Найпростіший - встановити apache2 SAPI.

  1. Щоб встановити apache2 SAPI, запустіть apt-get install libapache2-mod-php(це потягне на даний момент версію PHP за замовчуванням libapache2-mod-php7.0). Пакет повинен увімкнути себе і переключитися на apache2 prefork MPM, це єдиний підтримуваний MPM. Якщо ні, спробуйте запустити a2enmod php7.0і шукайте помилки. Установка повинна перейти з події MPM на попередньо форфоровану MPM автоматично, але якщо цього не відбувається, ви можете переключити її вручну, зробивши sudo a2dismod mpm_eventнаступні дії sudo a2enmod mpm_prefork.

  2. Щоб встановити FPM SAPI, запустіть apt-get install php-fpmта ввімкніть FPM, запустивши a2enconf php7.0-fpm. FPM SAPI є більш безпечним, але складніше його правильно налаштувати.

  3. Щоб встановити CGI SAPI, запустіть apt-get install php-cgiта ввімкніть CGI, запустивши a2enconf php7.0-cgi. Не забувайте, що CGI не рекомендується використовувати як запускати PHP, але це може стати в нагоді в спеціальних розгортаннях.


Я відредагував своє запитання, щоб надати більше деталей.
мачадуг

@machadoug відредагував відповідь, щоб включити опис, як переключити
MPM

Чи маєте ви якесь уявлення про те, як це виправити?
мачадуг

1
@machadoug Так, я додав: "Установка повинна переходити з MPM подій на попередньо форфорувати MPM автоматично, але якщо цього не відбувається, ви можете переключити її вручну, зробивши sudo a2dismod mpm_event, а потім sudo a2enmod mpm_prefork."
oerdnj

1
Чи відсутній крок у варіанті 2? Я встановив apache2 та php-fpm та запускаю команду a2enconf. Все вдалося, і обидві служби запущені, але мої PHP-файли виводяться безпосередньо, не обробляючи їх PHP. Немає помилок у журналах Apache або PHP-FPM.
Ендрю Енслі

1

Я знову змусив свою роботу, встановивши libapache2-mod-php7.0. Сподіваюсь, це допомагає.


0

Мене також покусало це питання по-іншому:

За замовчуванням сценарії PHP не працюватимуть у каталогах користувачів. Отже, якщо ваш сервер підтримує public_html у домашній папці користувачів і хочете дозволити користувачам запускати в ньому php, слід видалити частину, php7.0.confяка його відключає.


0

В останній версії Apache 2.0 для Ubuntu 16.04.2 я виявив, що Apache попередньо налаштовано з включеними потоками, але PHP 7 за замовчуванням - ні. Якщо PHP не компілюється з безпекою потоків, вам потрібно буде переключитися на префорк MPM, який не використовує потоки.

Для цього спочатку відключіть:

sudo a2dismod mpm_event 

Потім увімкніть:

sudo a2enmod mpm_prefork 

Ви повинні робити це в правильному порядку, оскільки вони взаємовиключні.

Потім перезапустіть Apache:

sudo service apache2 restart

Ви повинні бути гарними, щоб зараз без проблем.

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