อัปเกรดเป็น 16.04 php7 ไม่ทำงานในเบราว์เซอร์


69

ฉันเพิ่งอัพเกรดจาก 14.10 เป็น 16.04 และฉันไม่แน่ใจว่าจะกำหนดค่า PHP 7 ใน apache ได้อย่างไร ฉันแก้ไขไฟล์ php7.0.conf เพื่อไม่แสดงข้อคิดเห็นบรรทัดสุดท้ายรีสตาร์ท apache2 และไม่มีการเปลี่ยนแปลง

ฉันต้องเปลี่ยนการตั้งค่า apache2 เป็น php หรือไม่

PHP ทำงานจากบรรทัดคำสั่งดังนั้นฉันมั่นใจว่าติดตั้ง php ไว้อย่างถูกต้อง

นอกจากนี้ฉันได้รับข้อผิดพลาดเกี่ยวกับ phpadmin ที่บอกว่า mbstring หายไป


1
การทำงาน CLI SAPI ( phpคำสั่ง) เป็นมุมฉากของ PHP SAPIs อื่น (apache2, FPM, CGI, ... ) ดังนั้นบรรทัดคำสั่งที่ใช้งานได้ PHP ไม่ได้พูดอะไรเกี่ยวกับการทำงานของ PHP ในเซิร์ฟเวอร์ HTTP
oerdnj

2
สำหรับ mbstring ที่หายไปทำ: sudo apt-get install php-mbstring(ใครจะคิดใช่มั้ย)
oerdnj

"php7 ไม่ทำงานในเบราว์เซอร์" หมายถึงอะไร คุณกำลังพูดเกี่ยวกับ Apache ไม่เริ่ม? PHP ไม่ใช่ภาษาฝั่งไคลเอ็นต์
Andrea Lazzarotto

เป็นเรื่องที่น่าเศร้าใจจริงๆที่เห็นคำตอบเหล่านี้นำผู้ใช้เพื่อเปิดใช้งาน mpm-prefork และ mod-php นี่เป็นก้าวถอยหลังที่ยิ่งใหญ่
Andrew Ensley

คำตอบ:


81

เหมือนเมื่อก่อนคุณต้องติดตั้ง PHP สำหรับ Apache

จากคู่มือเซิร์ฟเวอร์ :

sudo apt install php libapache2-mod-php

คำสั่งนั้นจะติดตั้ง PHP และโมดูล Apache 2 PHP เพียงกำหนดค่า Apache เหมือนก่อน ( sudo a2enmod php7.0ฉันคิดว่าจะเปิดโมดูล)


mbstringปัญหาของคุณคล้ายกัน - คุณต้องติดตั้งส่วนขยายดังกล่าว:

sudo apt install php7.0-mbstring

สำหรับโมดูลที่ขาดหายไปอื่น ๆ จะมีสิ่งที่คล้ายกันที่จะต้องติดตั้งเช่นกัน


โมดูล php ควรเปิดใช้งานตามค่าเริ่มต้นเมื่อทำการติดตั้ง ถ้าไม่มันจะต้องเป็นแบบเต็มsudo a2enmod php7.0(หรือดังนั้นฉันตัดสินใจโดยการปิดการใช้งานและเปิดใช้งานบนคอมพิวเตอร์ของฉัน.) น่าสนใจฉันได้รับข้อความนี้:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies

@DougSmythies ผมถือว่าคุณไม่ได้อ่านที่ผมบอกว่าคุณต้องเปิดใช้งานโมดูล ...
โทมัสวอร์ด

1
ใช่ฉันทำซึ่งเป็นเหตุผลที่ฉันแสดงความคิดเห็น sudo a2enmod phpจะไม่ทำงานฉันลองแล้ว อย่างไรก็ตามsudo a2enmod php7.0จะใช้งานได้
Doug Smythies

1
ควรทำเครื่องหมายเป็นคำตอบที่ถูกต้อง Ubuntu 16.04 ติดตั้งใหม่ไม่รวมโมดูล apache2 นี้โดยค่าเริ่มต้น
Selosindis

@Selosindis เห็นด้วยอย่างแน่นอน! ยังคงน่ารำคาญว่าด้วย Ubuntu 16.04 กระบวนการติดตั้งมาตรฐานเปลี่ยนไปเมื่อเทียบกับรุ่นเก่า
โสกราตีส

40

ในการกำหนดค่า php7 เพื่อให้ทำงานกับเซิร์ฟเวอร์ของคุณคุณต้องทำการกำหนดค่าบางอย่าง:

1. ตรวจสอบให้แน่ใจว่าคุณลบร่องรอยใด ๆ ของ php/php5

เปิด terminal Ctrl+ Alt+ Tและ:

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

ผลลัพธ์ไม่ควรมีphp5.confหรือphp5.loadแต่ถ้าเป็นเช่นนั้นให้ทำดังต่อไปนี้:

# 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

ตอนนี้เพิ่มphp7.0.confและphp7.0.loadแทน:

# 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

ผลลัพธ์ของls -la php*ควรมีลักษณะเช่นนี้:

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

หลังจากจัดการกับโมดูลตอนนี้เรามาถึง/etc/apache2/conf-enabledไดเรกทอรี ลบร่องรอยของ php / php5 ที่นี่ด้วยsudo rm <name>

จากนั้นถ้าจำเป็นให้ทำ:

# 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

ผลลัพธ์ของls -la php*ควรมีลักษณะเช่นนี้:

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

ก่อนที่จะเริ่ม Apache ให้แน่ใจว่าได้ทำความสะอาด Apache error.logแล้วรีสตาร์ท:

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

ตอนนี้ตรวจสอบerror.logโดยการออกcat /var/log/apache2/error.log | less(ท่อผ่านน้อยช่วยให้คุณสามารถเลื่อนขึ้นและลงง่ายqออกจากการส่งออก)

หากคุณerror.logมีจำนวนมาก (และฉันแท้จริงหมายถึงกองของ) บางMIBS not foundทำต่อไปนี้:

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ตอนนี้ควรมีเพียง 3 บรรทัด:

[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 ของคุณด้วย php7.0 ควรได้รับการกำหนดค่าอย่างเหมาะสม


2
ใช้a2enmodและa2dismodคำสั่งแทนการซ่อมแซมด้วยตนเองด้วยลิงก์ในmods-available/ mods-enabled(ในทำนองเดียวกันa2enconfและa2disconfสำหรับconf-{available,enabled})
muru

1
แก้ไขคำตอบของฉันตามอินพุตของคุณ
Videonauth

การเล่นซอกับลิงก์เป็นอันตรายa2enmodและa2dismodจำสถานะของโมดูลในรีจิสตรีแพคเกจ apache2 ภายในได้ดังนั้นการสร้าง / ลบลิงก์ด้วยตนเองอาจทำให้ระบบของคุณเสียสำหรับการอัพเกรดในอนาคตเนื่องจากสคริปต์อัพเกรดดูสถานะของฐานข้อมูลภายในนี้
oerdnj

@oerdnj: การสร้างไข่เจียวอาจทำลายไข่ ... ;-)
Fabby

1
@David Wright - บางทีคุณพยายามเรียกใช้สคริปต์ PHP จากไดเรกทอรีผู้ใช้ - สิ่งเหล่านี้ถูกปิดใช้งานโดยค่าเริ่มต้น ถ้าเป็นเช่นนั้นคุณจะต้องเปิด php7.0.conf และใส่ความคิดเห็นในส่วนสุดท้าย เพิ่มเติมได้ที่นี่devplant.net/2010/05/04/…
xcxc

12

ฉันเจอปัญหานี้เช่นกัน

มันช่วยให้ฉันลบ PHP ทั้งหมดและติดตั้ง php7 อีกครั้ง

สิ่งที่ต้องการคือ:

sudo apt-get purge php*

php7 จะถูกลบหลังจากนั้นเพียงติดตั้งใหม่:

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

1
ฉันเคยลองหลายสิ่งมาก่อนและวิธีนี้ใช้ได้กับฉัน ขอขอบคุณ!!!
Srikanth Ponnapalli

1
พระเจ้าช่วย. คุณช่วยฉันไว้.
2560

นี่เป็นทางออกเดียวที่ได้ผลสำหรับฉัน ไชโย!
geevee

สิ่งนี้ช่วยฉันได้เพราะหลังจากอัปเกรด Ubuntu ฉันไม่พบ php7.0-cgi ที่เชื่อถือได้ แต่โปรดทราบว่าการดำเนินการsudo apt-get purge php*ดังกล่าวจะลบ phpMyAdmin ของคุณด้วยหากคุณมี
Artur Czyżewski

8

ฉันไม่เพียง แต่กรณี php ไม่ทำงาน แต่ phpmyadmin เช่นกันฉันทำทีละขั้นตอนเช่นนั้น

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

แล้วไปที่:

gksu gedit /etc/apache2/apache2.conf

ในบรรทัดสุดท้ายฉันจะเพิ่ม Include /etc/phpmyadmin/apache.conf

ที่ทำให้การจัดการกับปัญหาทั้งหมด


7

วิธีแก้ปัญหาที่ฉันพบสำหรับปัญหานี้คือการตั้งค่าเริ่มต้น PHP.INI สำหรับ short_open_tag โดยค่าเริ่มต้นนี้ถูกตั้งค่าเป็น 'ปิด' รหัส PHP ของฉันเริ่มต้นด้วย

   <?

แทน

   <?php

หากเปิดใช้งาน short_open_tag (โดยการเปลี่ยน 'ปิด' เป็น 'เปิด' ใน php.ini ของฉัน) และรีเซ็ตเซิร์ฟเวอร์ apache ( sudo service apache2 restart) และ PHP ก็โผล่ขึ้นมาอีกครั้ง


OMMFG! แน่นอนว่ามันจะเป็นความคิดเห็นสุดท้ายที่มี upvotes ที่ทำงานให้ฉันในที่สุด! ขอบคุณมาก mf @prickrick !!!
hyperGeoMetric

0

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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

หมายเหตุ: จำเป็นต้องใช้ข้อมูลด้านบนเนื่องจากการlibphp7.soรวมกับphp-apacheไม่สามารถใช้งานได้mod_mpm_eventแต่จะใช้งานได้ mod_mpm_preforkแทน ( FS # 39218 )

มิฉะนั้นคุณจะได้รับข้อผิดพลาดต่อไปนี้:

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

คุณสามารถใช้mod_proxy_fcgi(ดูที่การใช้ php-fpm และ mod_proxy_fcgi ด้านล่าง )


0

ฉันก็สามารถเรียกใช้สคริปต์ php ได้สำเร็จจากบรรทัดคำสั่งบน Ubuntu 16.04 แต่ไม่สามารถใช้กับเบราว์เซอร์ใดก็ได้ ในความพยายามที่จะแก้ปัญหาฉันได้ลบสำเนาที่มีอยู่ของทั้ง php7.0 และ apache2 หลังจากนั้นฉันติดตั้งใหม่ทั้งสองจากบรรทัดคำสั่งรวมถึงห้องสมุด PHP ของ apache2 ความขัดข้องตามมาเมื่อฉันพยายามเรียกใช้ "a2enmod php7.0" ซึ่งแจ้งให้ฉันทราบว่าโมดูล php7.0 ไม่มีอยู่แม้ว่าข้อเท็จจริงที่ว่าอีกครั้งฉันก็สามารถเรียกใช้สคริปต์ php จากบรรทัดคำสั่งได้ สัญชาตญาณเตะเข้ามาเมื่อเปิด Synaptic ฉันค้นพบว่าเมื่อฉันติดตั้ง apache2 php ไลบรารี่จากบรรทัดคำสั่งฉันติดตั้ง libapache2-mod-php7.0 เท่านั้นและลืมติดตั้ง "wrapper," libapache2-mod- PHP โดยที่อดีตจะไม่ทำงาน


1
"wrapper" ชื่ออะไร?
EKons
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.