16.04'e yükseltin. php7 tarayıcıda çalışmıyor


69

14.10'dan 16.04'e yükselttim ve PHP 7'yi apache'de nasıl yapılandıracağımdan emin değilim. Php7.0.conf dosyasını, son satırların apache2'yi yeniden başlattığını ve değişiklik yapmadığını uncomment olarak değiştirdim.

PHP'ye izin vermek için apache2 kurulumunu değiştirmem gerekir mi?

PHP komut satırından çalışır, bu yüzden php'nın doğru şekilde kurulduğundan eminim.

Ayrıca, phpadmin'de mbstring'in eksik olduğunu söyleyen bir hata alıyorum.


1
Çalışma CLI SAPI ( phpkomut) diğer PHP SAPI'lara (apache2, FPM, CGI, ...) diktir, bu nedenle PHP çalışan PHP komut satırı HTTP sunucusunda çalışmak hakkında hiçbir şey söylemez.
oerdnj

2
Kayıp mbstring için: sudo apt-get install php-mbstring(kim doğru düşünebilirdi ki?)
oerdnj

"Php7 tarayıcıda çalışmıyor" ne demek? Apache'nin başlamadığından mı bahsediyorsun? PHP bir müşteri tarafı dili değildir.
Andrea Lazzarotto

Kullanıcıların mpm-prefork ve mod-php işlevlerini etkinleştirmelerini yönlendiren tüm bu cevapları görmek gerçekten moral bozucu. Bu geriye doğru büyük bir adım.
Andrew Ensley

Yanıtlar:


81

Tıpkı daha önce olduğu gibi Apache için PHP'yi kurmanız gerekiyor.

Gönderen Sunucu Rehberi :

sudo apt install php libapache2-mod-php

Bu komut PHP ve Apache 2 PHP modülünü yükleyecektir. Apache'yi önceden olduğu gibi yapılandırın ( sudo a2enmod php7.0bence modülü açacak).


Kişisel mbstringmesele benzer - uzantıyı yüklemeniz gerekir:

sudo apt install php7.0-mbstring

Diğer eksik modüller için de kurulması gereken benzer şeyler olacaktır.


Kurulum sırasında php modülü varsayılan olarak etkin olmalıdır. Değilse, dolu olması gerekir sudo a2enmod php7.0(ya da bilgisayarımda devre dışı bırakıp yeniden etkinleştirerek belirledim.) İlginç, şu mesajı aldım:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies

@DougSmythies Modülü etkinleştirmeniz gerektiğini söylediğim yerde okumadığınızı varsayıyorum ...
Thomas Ward

1
Evet yaptım, bu yüzden yorum yaptım. sudo a2enmod phpçalışmayacak, denedim. Ancak sudo a2enmod php7.0çalışacak.
Doug Smythies

1
Bu doğru cevap olarak işaretlenmelidir. Ubuntu 16.04 yeni kurulumu varsayılan olarak bu apache2 modülünü içermez.
Selosindis

@Selosindis Kesinlikle kabul etti! Yine de can sıkıcı olsa da, Ubuntu 16.04 ile standart yükleme işleminin eski sürümlere kıyasla değiştiğini söyledi.
Sokrates,

40

Php7'yi sunucunuzla çalışacak şekilde yapılandırmak için bazı yapılandırmalar yapmanız gerekir:

1. Herhangi bir iz bıraktığınızdan emin olun. php/php5

Bir terminali Ctrl+ Alt+ açın Tve:

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

Çıktı hiç içermemeli php5.confveya içermeli php5.load, fakat aşağıdakileri yapmalıdır :

# 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

Şimdi php7.0.confve php7.0.loadyerine:

# 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

Çıktısı ls -la php*şöyle görünmelidir:

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

Modüllerle ilgilendikten sonra şimdi /etc/apache2/conf-enableddizine geliyoruz . Burada da php / php5 izlerini kaldırın.sudo rm <name>

Ardından, gerekirse:

# 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

Çıktısı ls -la php*şöyle görünmelidir:

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'yi Yeniden Başlatma

Apache'yi yeniden başlatmadan önce Apache'yi temizlediğinizden emin olun, error.logardından yeniden başlatın:

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

Şimdi kontrol error.logdüzenlenmek suretiyle cat /var/log/apache2/error.log | less(yukarı ve aşağı kolay kaydırma sağlar az aracılığıyla boru qçıkışını çıkar).

Çok error.logsayıda içeriyorsa (ve ben kelimenin tam anlamıyla bir yığınını kastediyorsam ) bazıları MIBS not foundaşağıdakileri yapar:

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Şimdi tekrar kontrol edin , sadece 3 satır içermelidir:

[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'

Php7.0 ile Apache'niz şimdi doğru şekilde yapılandırılmalıdır.


2
Kullanım a2enmodve a2dismodyerine elle bağlantıları müdahele komutları mods-available/ mods-enabled(benzer şekilde, a2enconfve a2disconfiçin conf-{available,enabled}).
muru

1
Cevabımı girişinize göre gözden geçirdim.
Videonauth

Bağlantıları ile işe yaramaz olarak zararlıdır a2enmodve a2dismodbu nedenle bağlantıları elle yükseltme komut bu dahili veritabanının durumuna bakar gibi sistem gelecek yükseltmeler için kırık hale getirebileceğini / kaldırma yapım iç apache2 paket kayıt modüllerin durumunu hatırlayın.
oerdnj

@oerdnj: omlet yapmak yumurta kırabilir ... ;-)
Fab

1
@David Wright - Belki de PHP betiğini kullanıcı dizininden çalıştırmaya çalışıyorsunuzdur - bunlar varsayılan olarak devre dışı bırakılmıştır. Eğer öyleyse php7.0.conf dosyasını açmanız ve son bölümü yorum yapmanız gerekiyor. Daha fazla bilgi için devplant.net/2010/05/04/…
xcxc

12

Bende de bu problem var.

Tüm PHP silmek ve php7 yeniden yüklemek için bana yardımcı oldu.

Gerekli olan tek şey:

sudo apt-get purge php*

php7 silinecek, ardından sadece yeniden kurulacak:

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi  php7.0 libapache2-mod-php7.0

1
Daha önce birkaç şey denedim ve bu yöntem benim için çalışıyor. Teşekkür ederim!!!
Srikanth Ponnapalli

1
AMAN TANRIM. Beni kurtardın.
plhn

Bu benim için çalışan tek çözüm. şerefe!
Geevee

Bu bana yardımcı oldu, çünkü Ubuntu yükseltmesinden sonra php7.0-cgi 'yi conf-alavalable olarak bulamadım. AMA sudo apt-get purge php*eğer varsa phpMyAdmin'inizi de kaldıracağınızı unutmayın.
Artur Czyżewski

8

Im benim durumum sadece php işe yaramadı ama phpmyadmin aswell böyle adım adım

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

Ve sonra:

gksu gedit /etc/apache2/apache2.conf

Son satırda ekliyorum Include /etc/phpmyadmin/apache.conf

Bu tüm sorunların üstesinden gelebilir


7

Bu sorun için bulduğum çözüm short_open_tag için varsayılan PHP.INI ayarıydı. Varsayılan olarak bu 'Kapalı' olarak ayarlanmıştır. PHP kodum ile başladı

   <?

onun yerine

   <?php

Short_open_tag etkinleştirilirse (php.ini'deki 'Off' ayarını 'On' olarak değiştirerek) ve apache sunucusunu ( sudo service apache2 restart) sıfırlayın ve PHP canlı olarak geri döndü.


OMMFG! Tabii ki, sonunda benim için işe yarayan olumlu oyların olduğu son yorum olurdu! Çok teşekkür ederim, mf @ Patrick !!!
hyperGeoMetric

0

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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Not: Yukarıdakiler gereklidir, çünkü libphp7.sodahil olanlar php-apacheçalışmaz mod_mpm_event, ancak bunun yerine çalışırlar mod_mpm_prefork . ( FS # 39218 )

Aksi takdirde aşağıdaki hatayı alırsınız:

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

Alternatif olarak kullanabilirsiniz mod_proxy_fcgi(bkz . Php-fpm ve mod_proxy_fcgi ).


0

Ben de php scriptlerini Ubuntu 16.04'teki komut satırından başarıyla çalıştırabilirdim, fakat herhangi bir tarayıcıda kullanamadım. Sorunu çözmek için mevcut php7.0 ve apache2 kopyalarını temizledim. Daha sonra apache2'nin php kütüphanesinin yanı sıra komut satırından tekrar yükledim. "A2enmod php7.0" komutunu çalıştırmaya çalıştığımda hayal kırıklığı yaşadım, bu da php7.0 modülünün bir kez daha komut satırından php komut dosyaları çalıştırabilmeme rağmen var olmadığını söyledi. İçgüdüler başladı. Synaptic'i açarak apache2 php kütüphanesini komut satırından kurduğumda, sadece libapache2-mod-php7.0'ı kurduğumu ve "sarmalayıcı" libapache2-mod- programını da unuttuğumu öğrendim. php, hangi olmadan eski çalışmayacak.


1
"Sargının" adı nedir?
EKons
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.