Tingkatkan ke 16,04. php7 tidak berfungsi di browser

69

Saya baru saja memutakhirkan dari 14.10 ke 16.04 dan saya tidak yakin cara mengkonfigurasi PHP 7 di apache. Saya memang memodifikasi file php7.0.conf menjadi tanda komentar pada baris terakhir, restart apache2 dan tidak ada perubahan.

Apakah saya perlu mengubah pengaturan apache2 untuk mengizinkan php?

PHP berfungsi dari baris perintah jadi saya yakin php sudah terpasang dengan benar.

Selain itu, saya mendapatkan pesan kesalahan pada phpadmin yang mengatakan bahwa mbstring tidak ada.

David Wright
sumber
1
Bekerja CLI SAPI ( phpperintah) adalah ortogonal ke SAPI PHP lainnya (apache2, FPM, CGI, ...), jadi baris perintah yang bekerja PHP tidak mengatakan apa-apa tentang bekerja PHP di server HTTP.
oerdnj
2
Untuk mbstring yang hilang, lakukan: sudo apt-get install php-mbstring(siapa yang menyangka, kan?)
oerdnj
Apa artinya "php7 tidak berfungsi di browser"? Apakah Anda berbicara tentang Apache tidak memulai? PHP bukan bahasa sisi klien.
Andrea Lazzarotto
Sangat menyedihkan melihat semua jawaban ini mengarahkan pengguna untuk mengaktifkan mpm-prefork dan mod-php. Ini adalah langkah mundur yang sangat besar.
Andrew Ensley

Jawaban:

81

Sama seperti sebelumnya, Anda harus menginstal PHP untuk Apache.

Dari Panduan Server :

sudo apt install php libapache2-mod-php

Perintah itu akan menginstal PHP dan modul Apache 2 PHP. Cukup konfigurasikan Apache seperti sebelumnya ( sudo a2enmod php7.0, saya pikir, akan menyalakan modul).


mbstringMasalah Anda serupa - Anda harus menginstal ekstensi itu:

sudo apt install php7.0-mbstring

Untuk modul yang hilang lainnya akan ada hal-hal serupa yang harus diinstal juga.

Thomas Ward
sumber
Modul php harus diaktifkan secara default pada saat instalasi. Jika tidak, itu harus penuh sudo a2enmod php7.0(atau lebih saya ditentukan dengan menonaktifkan dan mengaktifkan kembali pada komputer saya.) Menarik, saya mendapat pesan ini:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies
@DougSmythies Saya menganggap Anda tidak membaca di mana saya katakan Anda harus mengaktifkan modul ...
Thomas Ward
1
Ya, benar, itulah sebabnya saya berkomentar. sudo a2enmod phptidak akan berhasil, saya mencobanya. Namun sudo a2enmod php7.0akan berhasil.
Doug Smythies
1
Ini harus ditandai sebagai jawaban yang benar. Ubuntu 16,04 instalasi baru tidak termasuk modul apache2 ini secara default.
Selosindis
@Selosindis Sepenuhnya setuju! Namun masih menjengkelkan, bahwa dengan Ubuntu 16.04 proses instalasi standar berubah dibandingkan dengan versi yang lebih lama.
Socrates
40

Untuk mengkonfigurasi php7 agar berjalan dengan server Anda, Anda perlu melakukan beberapa konfigurasi:

1. Pastikan Anda menghapus jejak php/php5

Buka terminal Ctrl+ Alt+ Tdan:

cd /etc/apache2/mods-enabled
ls -la

Output tidak boleh mengandung apa pun php5.confatau php5.load, tetapi jika itu terjadi, lakukan hal berikut:

# 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

Sekarang tambahkan php7.0.confdan php7.0.loadsebagai gantinya:

# 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

Output dari ls -la php*akan terlihat seperti ini:

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

Setelah berurusan dengan modul, sekarang kita sampai pada /etc/apache2/conf-enableddirektori. Hapus jejak php / php5 di sini juga olehsudo rm <name>

Kemudian, jika perlu lakukan:

# 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

Output dari ls -la php*akan terlihat seperti ini:

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. Mulai Ulang Apache2

Sebelum memulai ulang Apache, pastikan untuk membersihkan Apache error.logkemudian mulai kembali:

sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

Sekarang periksa error.logdengan mengeluarkan cat /var/log/apache2/error.log | less(piping through less memungkinkan Anda untuk dengan mudah menggulir ke atas dan ke bawah, qkeluar dari output).

Jika Anda error.logmengandung banyak (dan saya benar-benar berarti tumpukan dari) beberapa MIBS not foundlakukan hal berikut:

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

Cek lagi error.logsekarang seharusnya hanya berisi 3 baris:

[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 Anda dengan php7.0 sekarang harus dikonfigurasi dengan benar.

Videonauth
sumber
2
Gunakan perintah a2enmoddan a2dismodalih-alih bermain-main secara manual dengan tautan di mods-available/ mods-enabled(sama, a2enconfdan a2disconfuntuk conf-{available,enabled}).
muru
1
Revisi jawaban saya sesuai dengan masukan Anda.
Videonauth
Mengotak-atik tautan berbahaya seperti a2enmoddan a2dismodmengingat keadaan modul dalam registri paket apache2 internal, jadi membuat / menghapus tautan secara manual mungkin membuat sistem Anda rusak karena peningkatan di masa mendatang karena skrip pemutakhiran melihat keadaan basis data internal ini.
oerdnj
@ oerdnj: membuat telur dadar dapat memecahkan telur ... ;-)
Fabby
1
@ David Wright - Mungkin Anda mencoba menjalankan skrip PHP dari direktori pengguna - ini dinonaktifkan secara default. Jika demikian, Anda perlu membuka php7.0.conf dan berkomentar di bagian terakhir. Lebih lanjut di sini devplant.net/2010/05/04/...
xcxc
12

Saya punya masalah ini juga.

Ini membantu saya untuk menghapus semua PHP dan menginstal ulang php7.

Yang dibutuhkan hanyalah:

sudo apt-get purge php*

php7 akan dihapus, setelah itu hanya untuk menginstal ulang:

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi  php7.0 libapache2-mod-php7.0
Tom Idar Wangberg
sumber
1
Saya telah mencoba beberapa hal sebelumnya dan metode ini bekerja untuk saya. Terima kasih!!!
Srikanth Ponnapalli
1
YA TUHAN. Kamu menyelamatkanku.
plhn
ini adalah satu-satunya solusi yang berhasil untuk saya. tepuk tangan!
geevee
Ini membantu saya, karena setelah upgrade Ubuntu saya tidak menemukan php7.0-cgi di conf-avaliable. TETAPI ingat bahwa melakukan sudo apt-get purge php*akan menghapus phpMyAdmin Anda juga, jika ada.
Artur Czyżewski
8

Saya kasus saya tidak hanya php tidak berfungsi tetapi phpmyadmin juga saya lakukan langkah demi langkah seperti itu

sudo apt install php libapache2-mod-php
sudo apt install php7.0-mbstring
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Dan kemudian ke:

gksu gedit /etc/apache2/apache2.conf

Di baris terakhir saya menambahkan Include /etc/phpmyadmin/apache.conf

Itu membuat kesepakatan dengan semua masalah

Maciej
sumber
7

Solusi yang saya temukan untuk masalah ini adalah pengaturan PHP.INI default untuk short_open_tag. Secara default ini diatur ke 'Off'. Kode PHP saya dimulai dengan

   <?

dari pada

   <?php

Jika diaktifkan short_open_tag (dengan mengubah 'Nonaktif' ke 'Aktif' di php.ini saya) dan mengatur ulang server apache ( sudo service apache2 restart) dan PHP muncul kembali hidup-hidup.

patrick
sumber
OMMFG! Tentu saja itu akan menjadi komentar terakhir dengan upvotes yang akhirnya berhasil untuk saya! Terima kasih banyak, @ patrick !!!
hyperGeoMetric
0

https://wiki.archlinux.org/index.php/Apache_HTTP_Server

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Catatan: Persyaratan di atas diperlukan, karena libphp7.sodisertakan dengan php-apachetidak berfungsi mod_mpm_event, tetapi hanya akan berfungsi mod_mpm_prefork sebagai gantinya. ( FS # 39218 )

Kalau tidak, Anda akan mendapatkan kesalahan berikut:

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

Sebagai alternatif, Anda dapat menggunakan mod_proxy_fcgi(lihat Menggunakan php-fpm dan mod_proxy_fcgi di bawah ).

pengguna539644
sumber
0

Saya juga bisa menjalankan skrip php dengan sukses dari baris perintah di Ubuntu 16.04, tetapi tidak di browser apa pun. Dalam upaya untuk menyelesaikan masalah, saya membersihkan salinan php7.0 dan apache2 yang ada. Setelah itu saya menginstal ulang baik dari baris perintah termasuk juga perpustakaan php apache2. Frustrasi mengikuti ketika saya mencoba menjalankan "a2enmod php7.0," yang memberi tahu saya bahwa modul php7.0 tidak ada meskipun fakta bahwa sekali lagi saya dapat menjalankan skrip php dari baris perintah. Naluri itu muncul. Membuka Synaptic, saya menemukan bahwa ketika saya menginstal pustaka php apache2 dari baris perintah, saya hanya menginstal libapache2-mod-php7.0, dan lupa juga untuk menginstal "wrapper," libapache2-mod- php, tanpanya yang pertama tidak akan berfungsi.

Bill Wilken
sumber
1
Apa nama "bungkusnya"?
EKons