Ubuntu 16.04 yükseltmesinden sonra PHP metin olarak işlendi


20

Apache, Ubuntu 16.04 yükseltmesinden sonra PHP dosyalarını metin olarak oluşturuyor.

Apache yüklü ve çalışıyor. PHP7 çalışıyor. Aşağıdaki komutu yürüttüğümde doğru çıktıyı alıyorum:

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

Ancak http: //localhost/info.php veya başka bir php dosyasına eriştiğimde sayfa yerine dosya içeriğini alıyorum.

Çevrimiçi yardımın çoğu Ubuntu ve PHP'nin eski sürümleri içindir, bu yüzden güvenilir olup olmadıklarından emin değilim.

GÜNCELLEME: Apache, libapache2-mod-php7.0 yüklendikten ve php7.0 etkinleştirildikten sonra başlamaz. Çıktıya bakın:

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.

Çıktı 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'.

Çıktı 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) 

Hata ile ilgili olarak, bu sorunla ilgili https://wiki.archlinux.org/index.php/Apache_HTTP_Server'daApache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP biraz yardım buldum , ancak dosya yolları Ubuntu'ndakilerle eşleşmedi, bu yüzden önerilen düzeltme.

Yanıtlar:


27

phpKomut tarafından sağlanan php7.0-cliUbuntu 16.04 üzerinde paketin. CLI'nin çalıştırılması web sunucusu yapılandırmasına diktir.

Web SAPI'lerinden birini (apache2, fpm veya cgi) kurmanız ve yapılandırmanız gerekir. En kolayı apache2 SAPI'yi kurmaktır.

  1. Apache2 SAPI'yi kurmak için çalıştırın apt-get install libapache2-mod-php(bu şu anda varsayılan PHP sürümünü çekecektir libapache2-mod-php7.0). Paket kendini etkinleştirmeli ve desteklenen tek MPM olan apache2 prefork MPM'ye geçmelidir. Değilse, çalıştırmayı deneyin a2enmod php7.0ve hata arayın. Kurulum, olay MPM'sinden otomatik olarak MPM öncesi forfork'a geçmelidir, ancak değilse, bunu yaparak sudo a2dismod mpm_eventbunu manuel olarak değiştirebilirsiniz sudo a2enmod mpm_prefork.

  2. FPM SAPI'yi yüklemek için, çalıştırıp FPM'yi apt-get install php-fpmetkinleştirin a2enconf php7.0-fpm. FPM SAPI daha güvenlidir, ancak doğru yapılandırılması daha zordur.

  3. CGI SAPI'yi yüklemek için, çalıştırın apt-get install php-cgive çalıştırarak CGI'yı etkinleştirin a2enconf php7.0-cgi. Lütfen CGI'nin PHP'nin nasıl çalıştırılacağı önerilmez, ancak özel dağıtımlarda kullanışlı olabilir.


Daha fazla ayrıntı sağlamak için sorumu düzenledim.
machadoug

@machadoug MPM'lerin nasıl değiştirileceği hakkında açıklama eklemek için cevabı düzenledi
oerdnj

Nasıl düzeltileceği hakkında bir fikriniz var mı?
machadoug

1
@machadoug Evet, ekledim "Kurulum, olay MPM'sinden otomatik olarak MPM'yi önceden güçlendirmeye geçmelidir, ancak eğer yapmazsa, sudo a2dismod mpm_event ve ardından sudo a2enmod mpm_prefork yaparak manuel olarak değiştirebilirsiniz."
oerdnj

1
Seçenek 2'de eksik bir adım var mı? Apache2 ve php-fpm yükledim ve a2enconf komutunu çalıştırdım. Hepsi başarılı oldu ve her iki hizmet de çalışıyor, ancak PHP dosyalarımı php işlemeden doğrudan çıktı alıyorlar. Apache veya PHP-FPM için herhangi bir günlükte hata yok.
Andrew Ensley

1

Ben libapache2-mod-php7.0'ı yükleyerek madeni tekrar çalıştırdım Bu yardımcı olur umarım.


0

Ayrıca bu sorundan farklı bir şekilde ısırıldım:

Varsayılan olarak PHP komut dosyaları kullanıcı dizinlerinde çalışmaz. Sunucunuz kullanıcıların ana klasöründe public_html'yi destekliyorsa ve kullanıcıların php'yi çalıştırmasına izin vermek istiyorsanız php7.0.conf, devre dışı bırakan parçayı kaldırmalısınız .


0

En son Apache 2.0'da, Ubuntu 16.04.2 için Apache'nin iş parçacıkları etkinleştirilmiş olarak önceden yapılandırıldığını, ancak varsayılan PHP 7'nin bulunmadığını gördüm. PHP threadsafe ile derlenmemişse, thread kullanmayan prefork MPM'ye geçmeniz gerekecektir.

Bunu yapmak için önce devre dışı bırakın:

sudo a2dismod mpm_event 

Ardından etkinleştirin:

sudo a2enmod mpm_prefork 

Karşılıklı özel oldukları için bunu doğru sırayla yapmanız gerekir.

Ardından Apache'yi yeniden başlatın:

sudo service apache2 restart

Şimdi sorunsuz gitmek iyi olmalı.

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.