PHP diterjemahkan sebagai teks setelah peningkatan Ubuntu 16.04

20

Apache membuat file PHP sebagai teks setelah upgrade Ubuntu 16.04.

Apache diinstal dan dijalankan. PHP7 sedang berjalan. Ketika saya menjalankan perintah berikut ini saya mendapatkan output yang benar:

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

Namun ketika saya mengakses http: //localhost/info.php atau file php lainnya, saya mendapatkan konten file alih-alih halaman.

Sebagian besar bantuan online adalah untuk versi Ubuntu dan PHP yang lebih lama, jadi saya tidak yakin mereka dapat diandalkan atau tidak.

UPDATE: Apache tidak akan mulai setelah menginstal libapache2-mod-php7.0 dan mengaktifkan php7.0. Lihat output:

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.

Output dari 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'.

Output dari 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) 

Mengenai kesalahan Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHPsaya memang menemukan bantuan di https://wiki.archlinux.org/index.php/Apache_HTTP_Server mengenai masalah ini, namun jalur file tidak cocok dengan yang ada di Ubuntu, jadi saya tidak mencoba menerapkan perbaikan yang direkomendasikan.

machadoug
sumber

Jawaban:

27

The phpperintah yang diberikan oleh php7.0-clipaket pada Ubuntu 16.04. Menjalankan CLI adalah ortogonal ke konfigurasi server web.

Anda perlu menginstal dan mengkonfigurasi salah satu SAPI web - apache2, fpm atau cgi. Yang paling mudah adalah menginstal SAPI apache2.

  1. Untuk menginstal SAPI apache2, jalankan apt-get install libapache2-mod-php(ini akan menarik versi PHP default, saat ini libapache2-mod-php7.0). Paket harus mengaktifkan dirinya sendiri dan beralih ke apache2 prefork MPM yang merupakan satu-satunya MPM yang didukung. Jika tidak, coba jalankan a2enmod php7.0dan cari kesalahan. Instalasi harus beralih dari acara MPM ke prefork MPM secara otomatis, tetapi jika tidak, Anda dapat beralih secara manual dengan melakukan sudo a2dismod mpm_eventdiikuti olehsudo a2enmod mpm_prefork .

  2. Untuk menginstal FPM SAPI, jalankan apt-get install php-fpmdan kemudian aktifkan FPM dengan menjalankan a2enconf php7.0-fpm. FPM SAPI lebih aman, tetapi lebih sulit untuk dikonfigurasi dengan benar.

  3. Untuk menginstal CGI SAPI, jalankan apt-get install php-cgidan kemudian aktifkan CGI dengan menjalankan a2enconf php7.0-cgi. Harap jangan bahwa CGI tidak direkomendasikan cara menjalankan PHP, tetapi mungkin berguna dalam penerapan khusus.

oerdnj
sumber
Saya telah mengedit pertanyaan saya untuk memberikan detail lebih lanjut.
machadoug
@machadoug mengedit jawaban untuk memasukkan deskripsi cara mengganti MPM
oerdnj
Apakah Anda punya ide tentang cara memperbaikinya?
machadoug
1
@machadoug Ya, saya menambahkan "Instalasi harus beralih dari acara MPM ke prefork MPM secara otomatis, tetapi jika tidak, Anda dapat beralih secara manual dengan melakukan sudo a2dismod mpm_event diikuti oleh sudo a2enmod mpm_prefork."
oerdnj
1
Apakah ada langkah yang hilang dari opsi 2? Saya telah menginstal apache2 dan php-fpm, dan menjalankan perintah a2enconf. Semua berhasil, dan kedua layanan berjalan, tetapi file PHP saya sedang di-output langsung tanpa php memprosesnya. Tidak ada kesalahan dalam log untuk Apache atau PHP-FPM.
Andrew Ensley
1

Saya membuat saya berjalan lagi dengan menginstal libapache2-mod-php7.0. Semoga ini membantu.

Tommy Holt
sumber
0

Saya juga digigit oleh masalah ini dengan cara yang berbeda:

Secara default skrip PHP tidak akan berjalan di direktori pengguna. Jadi jika server Anda mendukung public_html di folder rumah pengguna dan ingin membiarkan pengguna menjalankan php di dalamnya, Anda harus menghapus bagian php7.0.confyang menonaktifkannya.

Calmarius
sumber
0

Di Apache 2.0 terbaru, untuk Ubuntu 16.04.2 saya menemukan bahwa Apache sudah dipra-konfigurasi dengan utas diaktifkan, tetapi PHP 7 default tidak. Jika PHP tidak dikompilasi dengan threadsafe, Anda harus beralih ke prefork MPM, yang tidak menggunakan utas.

Untuk melakukan ini, nonaktifkan dulu:

sudo a2dismod mpm_event 

Kemudian aktifkan:

sudo a2enmod mpm_prefork 

Anda harus melakukan ini dalam urutan yang benar karena mereka saling eksklusif.

Kemudian restart Apache:

sudo service apache2 restart

Anda harus baik pergi tanpa masalah sekarang.

Jeff Galbraith
sumber