PHP hiển thị dưới dạng văn bản sau khi nâng cấp Ubuntu 16.04


20

Apache đang hiển thị các tệp PHP dưới dạng văn bản sau khi nâng cấp Ubuntu 16.04.

Apache được cài đặt và chạy. PHP7 đang chạy. Khi tôi thực hiện lệnh sau, tôi nhận được đầu ra chính xác:

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

Tuy nhiên, khi tôi truy cập http: //localhost/info.php hoặc bất kỳ tệp php nào khác, tôi nhận được nội dung tệp thay vì trang.

Hầu hết các trợ giúp trực tuyến là dành cho các phiên bản cũ hơn của cả Ubuntu và PHP, vì vậy tôi không chắc chúng có đáng tin hay không.

CẬP NHẬT: Apache sẽ không bắt đầu sau khi cài đặt libapache2-mod-php7.0 và bật php7.0. Xem đầu ra:

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.

Đầu ra của 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'.

Đầu ra của 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) 

Liên quan đến lỗi Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHPtôi đã tìm thấy một số trợ giúp trong https://wiki.archlinux.org/index.php/Apache_HTTP_Server về vấn đề này, tuy nhiên các đường dẫn tệp không khớp với những người trong Ubuntu, vì vậy tôi đã không thử áp dụng đề nghị sửa chữa.

Câu trả lời:


27

Các phplệnh được cung cấp bởi php7.0-cligói trên Ubuntu 16.04. Chạy CLI là trực giao với cấu hình máy chủ web.

Bạn cần cài đặt và định cấu hình một trong những SAPI web - apache2, fpm hoặc cgi. Dễ dàng nhất là cài đặt apache2 SAPI.

  1. Để cài đặt apache2 SAPI, hãy chạy apt-get install libapache2-mod-php(hiện tại nó sẽ kéo phiên bản PHP mặc định libapache2-mod-php7.0). Gói phải tự kích hoạt và chuyển sang apache2 prefork MPM là MPM duy nhất được hỗ trợ. Nếu không, hãy cố gắng chạy a2enmod php7.0và tìm lỗi. Việc cài đặt sẽ tự động chuyển từ MPM sự kiện sang prefork MPM, nhưng nếu không, bạn có thể chuyển đổi thủ công bằng cách thực hiện sudo a2dismod mpm_eventtheo sau sudo a2enmod mpm_prefork.

  2. Để cài đặt FPM SAPI, hãy chạy apt-get install php-fpmvà sau đó kích hoạt FPM bằng cách chạy a2enconf php7.0-fpm. FPM SAPI an toàn hơn, nhưng khó cấu hình chính xác hơn.

  3. Để cài đặt CGI SAPI, hãy chạy apt-get install php-cgivà sau đó bật CGI bằng cách chạy a2enconf php7.0-cgi. Xin lưu ý rằng CGI không được khuyến nghị cách chạy PHP, nhưng nó có thể có ích trong các triển khai đặc biệt.


Tôi đã chỉnh sửa câu hỏi của mình để cung cấp thêm chi tiết.
machadoug

@machadoug đã chỉnh sửa câu trả lời để bao gồm mô tả cách chuyển
MPM

Bạn có biết làm thế nào để sửa nó không?
machadoug

1
@machadoug Có, tôi đã thêm "Việc cài đặt sẽ tự động chuyển từ MPM sang prefork MPM, nhưng nếu không, bạn có thể chuyển đổi thủ công bằng cách thực hiện sudo a2dismod mpm_event theo sau là sudo a2enmod mpm_prefork."
oerdnj

1
Có một bước thiếu từ tùy chọn 2? Tôi đã cài đặt apache2 và php-fpm và chạy lệnh a2enconf. Tất cả đều thành công và cả hai dịch vụ đều đang chạy, nhưng các tệp PHP của tôi đang được xuất trực tiếp mà không cần xử lý php. Không có lỗi trong bất kỳ nhật ký nào cho Apache hoặc PHP-FPM.
Andrew Oblley

1

Tôi đã làm cho tôi chạy lại bằng cách cài đặt libapache2-mod-php7.0. Hi vọng điêu nay co ich.


0

Tôi cũng bị cắn bởi vấn đề này theo một cách khác:

Theo mặc định, các kịch bản PHP sẽ không chạy trong thư mục người dùng. Vì vậy, nếu máy chủ của bạn hỗ trợ public_html trong thư mục nhà của người dùng và muốn cho phép người dùng chạy php trong đó, bạn nên xóa phần trong php7.0.confđó để vô hiệu hóa nó.


0

Trong Apache 2.0 mới nhất, đối với Ubuntu 16.04.2 tôi thấy rằng Apache được cấu hình sẵn với các luồng được kích hoạt, nhưng PHP 7 mặc định thì không. Nếu PHP không được biên dịch với luồng an toàn, bạn sẽ cần chuyển sang MPM prefork, không sử dụng luồng.

Để làm điều này, trước tiên hãy vô hiệu hóa:

sudo a2dismod mpm_event 

Sau đó kích hoạt:

sudo a2enmod mpm_prefork 

Bạn phải làm điều này theo đúng thứ tự vì chúng là loại trừ lẫn nhau.

Sau đó khởi động lại Apache:

sudo service apache2 restart

Bạn nên đi tốt mà không có vấn đề bây giờ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.