Nâng cấp lên 16.04. php7 không hoạt động trong trình duyệt


69

Tôi mới nâng cấp từ 14.10 lên 16.04 và không biết cách định cấu hình PHP 7 trong apache. Tôi đã sửa đổi tệp php7.0.conf thành không ghi chú những dòng cuối cùng, khởi động lại apache2 và không thay đổi.

Tôi có cần thay đổi thiết lập apache2 để cho phép php không?

PHP hoạt động từ dòng lệnh nên tôi chắc chắn php được cài đặt đúng.

Ngoài ra, tôi gặp lỗi trên phpadmin nói rằng mbopes bị thiếu.


1
Làm việc CLI SAPI ( phplệnh) là trực giao với các SAPI PHP khác (apache2, FPM, CGI, ...), vì vậy dòng lệnh PHP hoạt động không nói gì về hoạt động của PHP trong máy chủ HTTP.
oerdnj

2
Đối với mbopes bị thiếu, hãy làm: sudo apt-get install php-mbstring(ai có thể nghĩ, phải không?)
oerdnj

"Php7 không hoạt động trong trình duyệt" nghĩa là gì? Bạn đang nói về Apache không bắt đầu? PHP không phải là ngôn ngữ phía máy khách.
Andrea Lazzarotto

Thật là chán nản khi thấy tất cả những câu trả lời này hướng người dùng kích hoạt mpm-prefork và mod-php. Đây là một bước lùi rất lớn.
Andrew Oblley

Câu trả lời:


81

Giống như trước đây, bạn phải cài đặt PHP cho Apache.

Từ Hướng dẫn máy chủ :

sudo apt install php libapache2-mod-php

Lệnh đó sẽ cài đặt PHP và mô-đun PHP 2 của Apache. Đơn giản chỉ cần cấu hình Apache như trước đây (theo sudo a2enmod php7.0tôi nghĩ, sẽ bật mô-đun).


mbstringVấn đề của bạn tương tự - bạn cần cài đặt tiện ích mở rộng đó:

sudo apt install php7.0-mbstring

Đối với các mô-đun bị thiếu khác, sẽ có những thứ tương tự phải cài đặt.


Mô-đun php nên được bật theo mặc định khi cài đặt. Nếu không, nó phải là đầy đủ sudo a2enmod php7.0(hoặc do đó tôi xác định bằng cách vô hiệu hóa và bật lại trên máy tính của tôi.) Thật thú vị, tôi nhận được thông báo này:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies

@DougSmythies Tôi cho rằng bạn đã không đọc nơi tôi nói bạn phải kích hoạt mô-đun ...
Thomas Ward

1
Vâng, tôi đã làm, đó là lý do tại sao tôi đã bình luận. sudo a2enmod phpSẽ không hoạt động, tôi đã thử nó. Tuy nhiên sudo a2enmod php7.0sẽ làm việc.
Doug Smythies

1
Điều này nên được đánh dấu là câu trả lời chính xác. Ubuntu 16.04 cài đặt mới không bao gồm mô-đun apache2 này theo mặc định.
Selosindis

@Selosindis Hoàn toàn đồng ý! Mặc dù vậy, vẫn còn khó chịu, với Ubuntu 16.04, quy trình cài đặt tiêu chuẩn đã thay đổi so với các phiên bản cũ hơn.
Socrates

40

Để cấu hình php7 để chạy với máy chủ của bạn, bạn cần thực hiện một số cấu hình:

1. Hãy chắc chắn rằng bạn xóa bất kỳ dấu vết nào của php/php5

Mở một thiết bị đầu cuối Ctrl+ Alt+ Tvà:

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

Đầu ra không được chứa bất kỳ php5.confhoặc php5.load, nhưng nếu có, hãy làm như sau:

# 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

Bây giờ thêm php7.0.confphp7.0.loadthay vào đó:

# 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

Đầu ra của nó ls -la php*sẽ trông như thế này:

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

Sau khi làm việc với các mô-đun, bây giờ chúng ta đến /etc/apache2/conf-enabledthư mục. Xóa mọi dấu vết của php / php5 tại đây bằng cáchsudo rm <name>

Sau đó, nếu cần làm:

# 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

Đầu ra của nó ls -la php*sẽ trông như thế này:

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. Khởi động lại Apache2

Trước khi khởi động lại Apache, hãy đảm bảo dọn sạch Apache error.logsau đó khởi động lại:

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

Bây giờ hãy kiểm tra error.logbằng cách phát hành cat /var/log/apache2/error.log | less(đường ống qua ít hơn cho phép bạn dễ dàng cuộn lên xuống, qthoát khỏi đầu ra).

Nếu của bạn error.logchứa nhiều (và theo nghĩa đen của tôi có nghĩa là một đống ), một số người MIBS not foundlàm như sau:

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

Việc kiểm tra lại error.logbây giờ chỉ nên chứa 3 dòng:

[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 của bạn với php7.0 bây giờ sẽ được cấu hình đúng.


2
Sử dụng các lệnh a2enmoda2dismodthay vì tự mày mò với các liên kết trong mods-available/ mods-enabled(tương tự a2enconfa2disconfcho conf-{available,enabled}).
muru

1
Sửa đổi câu trả lời của tôi theo đầu vào của bạn.
Videonauth

Việc thay đổi liên kết có hại vì a2enmoda2dismodnhớ trạng thái của các mô-đun trong sổ đăng ký gói apache2 nội bộ, do đó, việc tạo / xóa liên kết theo cách thủ công có thể khiến hệ thống của bạn bị hỏng để nâng cấp trong tương lai vì tập lệnh nâng cấp nhìn vào trạng thái của cơ sở dữ liệu nội bộ này.
oerdnj

@oerdnj: làm món trứng ốp la có thể làm vỡ trứng ... ;-)
Fabby

1
@David Wright - Có lẽ bạn đang cố chạy tập lệnh PHP từ thư mục người dùng - những thứ này bị tắt theo mặc định. Nếu vậy bạn cần mở php7.0.conf và nhận xét phần cuối cùng. Xem thêm tại đây devplant.net/2010/05/04/ từ
xcxc

12

Tôi đã có vấn đề này là tốt.

Nó giúp tôi xóa tất cả PHP và cài đặt lại php7.

Tất cả những gì cần thiết là:

sudo apt-get purge php*

php7 sẽ bị xóa, sau đó chỉ cần cài đặt lại:

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

1
Tôi đã thử một vài điều trước đây và phương pháp này hiệu quả với tôi. Cảm ơn bạn!!!
Srikanth Ponnapalli

1
CHÚA ƠI. Bạn đã cứu tôi.
plhn

đây là giải pháp duy nhất hiệu quả với tôi chúc mừng
geevee

Điều này đã giúp tôi, vì sau khi nâng cấp Ubuntu, tôi đã không tìm thấy php7.0-cgi trong tình trạng sẵn có. NHƯNG hãy nhớ rằng làm như vậy sudo apt-get purge php*cũng sẽ loại bỏ phpMyAdmin của bạn, nếu bạn có.
Artur Czyżewski

8

Trường hợp của tôi không chỉ php không hoạt động mà phpmyadmin cũng như tôi đã từng bước làm như vậy

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

Và sau đó:

gksu gedit /etc/apache2/apache2.conf

Trong dòng cuối cùng tôi thêm Include /etc/phpmyadmin/apache.conf

Điều đó giải quyết mọi vấn đề


7

Giải pháp tôi tìm thấy cho vấn đề này là cài đặt PHP.INI mặc định cho short_open_tag. Theo mặc định, điều này được đặt thành 'Tắt'. Mã PHP của tôi bắt đầu bằng

   <?

thay vì

   <?php

Nếu được bật short_open_tag (bằng cách thay đổi 'Tắt' thành 'Bật' trong php.ini của tôi) và đặt lại máy chủ apache ( sudo service apache2 restart) và PHP đã bật lại.


OMMFG! Tất nhiên nó sẽ là bình luận cuối cùng với upvote cuối cùng đã làm việc cho tôi! Cảm ơn bạn rất nhiều, @patrick !!!
hyperGeoMetric

0

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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Lưu ý: Ở trên là bắt buộc, vì đi libphp7.sokèm với php-apachekhông hoạt động mod_mpm_event, nhưng sẽ chỉ hoạt động mod_mpm_prefork thay thế. ( FS # 39218 )

Nếu không, bạn sẽ nhận được lỗi sau:

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

Để thay thế, bạn có thể sử dụng mod_proxy_fcgi(xem Sử dụng php-fpm và mod_proxy_fcgi bên dưới ).


0

Tôi cũng có thể chạy các tập lệnh php thành công từ dòng lệnh trên Ubuntu 16.04, nhưng không có trong bất kỳ trình duyệt nào. Trong nỗ lực giải quyết vấn đề, tôi đã thanh trừng các bản sao hiện có của cả php7.0 và apache2. Sau đó tôi đã cài đặt lại cả hai từ dòng lệnh bao gồm cả thư viện php của apache2. Thất vọng theo sau khi tôi cố chạy "a2enmod php7.0", thông báo cho tôi rằng mô-đun php7.0 không tồn tại mặc dù thực tế là một lần nữa tôi có thể chạy các tập lệnh php từ dòng lệnh. Bản năng bắt đầu. Mở Synaptic, tôi phát hiện ra rằng khi tôi cài đặt thư viện php apache2 từ dòng lệnh, tôi chỉ cài đặt libapache2-mod-php7.0 và cũng quên cài đặt "trình bao bọc", libapache2-mod- php, mà không có cái trước sẽ không hoạt động.


1
Tên của "bao bọc" là gì?
EKons
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.