phpinfo () และ php -v แสดง PHP รุ่นต่าง ๆ


20

ฉันอยากรู้ว่าphpฉันใช้เวอร์ชันไหนฉันจึงเขียนสคริปต์มาตรฐาน:

phpinfo();

ซึ่งให้ฉัน

PHP version 5.6.10

ถูกต้อง PHP รุ่นที่จำเป็นสำหรับการสมัครของฉัน เมื่อฉันพยายามใน terminal:

php -i

หรือ

php -v

มันแสดงให้ฉันเห็น:

PHP version 5.3.2

ซึ่งฉันไม่ต้องการ จากนั้นฉันก็ลองด้วย:

which php

มันแสดงให้ฉันเห็น:

/usr/bin/php

ตอนนี้ฉันสับสน PHP รุ่นใดที่ฉันใช้อยู่ ไฟล์จะถูกอัปโหลดไปยังเว็บไซต์โฮสติ้งและฉันไม่สามารถทำการเปลี่ยนแปลงใด ๆ config ไฟล์เหมือนหรือhttpd.confphp.ini

คำตอบ:


22

คำตอบที่สั้นกว่า

อย่าตกใจ! หากคุณกังวลว่าเซิร์ฟเวอร์ Apache ของคุณใช้ PHP เวอร์ชันใดผลลัพธ์ของphpinfo()สิ่งที่คุณควรใส่ใจ โมดูล Apache PHP และไบนารีบรรทัดคำสั่ง PHP เป็นสองสิ่งที่แตกต่างกันซึ่งไม่รบกวนซึ่งกันและกัน

ในความเป็นจริงคุณสามารถรวบรวมและโหลด PHP เวอร์ชันต่าง ๆ ที่คุณต้องการทำงานกับ Apache ได้ตราบใดที่คุณปรับ Apache ให้โหลดอย่างถูกต้อง อินเตอร์เฟสบรรทัดคำสั่ง PHP จะไม่เข้ามาเล่นในกรณีที่ Apache แยกวิเคราะห์หน้า PHP

เวอร์ชั่นบรรทัดคำสั่งของ PHP นั้นมีไว้สำหรับงานเฉพาะของบรรทัดคำสั่งและโมดูล PHP สำหรับ Apache จะไม่ใช้สัมผัสหรือจำเป็นต้องใช้

คำตอบอีกต่อไป

คุณพูดแบบนี้:

ฉันอยากรู้ว่าphpฉันใช้เวอร์ชันไหนฉันจึงเขียนสคริปต์มาตรฐาน:

phpinfo();

ซึ่งให้ PHP เวอร์ชัน 5.6.10 ซึ่งเป็นเวอร์ชัน PHP ที่ถูกต้องสำหรับแอปพลิเคชันของฉัน เมื่อฉันพยายามใน terminal:

php -i or php -v   

มันแสดงเวอร์ชั่น PHP 5.3.2 ที่ฉันไม่ต้องการ

รุ่นของ PHP ที่พร้อมใช้งานจากบรรทัดคำสั่งไม่มีส่วนเกี่ยวข้อง 100% กับรุ่นของ PHP ที่โหลดเป็นโมดูล สิ่งเหล่านี้แยกจากกันโดยสิ้นเชิง

ดังนั้นหากคุณกังวลเกี่ยวกับ PHP เวอร์ชันที่เว็บแอปพลิเคชันของคุณใช้อยู่หากphpinfo()แสดงเวอร์ชัน 5.6.10 และนั่นคือสิ่งที่คุณต้องการ / จำเป็นต้องปรับ 100%

PHP เวอร์ชั่นบรรทัดคำสั่งเป็นรายการระบบแยกจากกันโดยสิ้นเชิง phpinfo()ดังนั้นสิ่งเดียวที่สำคัญก็คือการส่งออกของ

ถ้าด้วยเหตุผลบางอย่างที่คุณต้องการใช้ PHP กับ Apache เวอร์ชันอื่นสิ่งที่คุณต้องทำก็คือติดตั้งโมดูล Apache PHP ที่คอมไพล์แล้วและเพิ่มหรือปรับ - หรือ - บรรทัดนี้ในการกำหนดค่า Apache ของระบบของคุณ:

LoadModule php5_module    /path/to/php/and/the/module/for/apache2/libphp5.so

และเพียงปรับเส้นทางไปที่libphp5.so- ซึ่งเป็นสิ่งที่ Apache ใช้ในการแยกวิเคราะห์ PHP - จากนั้นรีสตาร์ท Apache และคุณอยู่ในธุรกิจ

ตัวอย่างเช่น ณ จุดหนึ่งฉันต้องรวบรวม PHP เวอร์ชัน 5.1.6 จากแหล่งที่มา (ด้วยการสนับสนุนห้องสมุด GD) สำหรับใช้กับเครื่อง Ubuntu 12.04 ที่ใช้ PHP 5.3.5 ในไฟล์โหลดโมดูล PHP ของเซิร์ฟเวอร์ที่นี่:

/etc/apache2/mods-available/php5.load

ฉันมีสายเช่นนี้:

# LoadModule php5_module        /usr/lib/apache2/modules/libphp535.so
LoadModule php5_module        /usr/lib/apache2/modules/libphp516-gd.so

โปรดทราบว่าหนึ่งบรรทัดถูกlibphp535.soใส่เครื่องหมายความคิดเห็นไว้อย่างไรและอีกบรรทัดหนึ่งสำหรับไม่ใส่เครื่องหมายlibphp516-gd.soข้อคิดเห็นเป็นอย่างไร สิ่งที่ฉันทำคือฉันเปลี่ยนชื่อlibphp5.soโมดูล Apache 5.3.5 PHP เริ่มต้นlibphp535.soเป็นหมายเลขเวอร์ชันในชื่อดังนั้นฉันสามารถมีมันสำหรับการอ้างอิงและตั้งชื่อโมดูล PHP 5.1.6 (พร้อมสนับสนุนไลบรารี GD) libphp516-gd.soเพื่อให้ฉันรู้ว่า ก็เช่นกัน วิธีนี้ฉันมีพวกเขาทั้งสองให้ฉันเคียงข้างกันในระบบ

และเช่นเดียวกับที่ฉันพูดตอนเริ่มต้น - เวอร์ชัน PHP ที่ใช้ในบรรทัดคำสั่งไม่มีส่วนเกี่ยวข้องใด ๆ กับโมดูล Apache PHP ดังนั้นคุณสามารถมีโมดูล Apache PHP เวอร์ชันต่าง ๆ จำนวนหนึ่งที่วางอยู่บนระบบพร้อมใช้งาน เพียงแค่ปรับการตั้งค่าและรีสตาร์ท Apache และคุณควรจะใช้งานทุกอย่างเพื่อใช้ PHP เวอร์ชันใดก็ตามที่คุณระบุ Apache ควรใช้


26

หากคุณมีปัญหานี้ในขณะที่อัพเกรดจาก PHP5 เป็น PHP7 บน Ubuntu 14.04 ด้วย Apache นี่คือสิ่งที่ช่วยฉันได้ (เครดิตไปที่นี่ ):

ปิดการใช้งานโมดูล PHP5 บน Apache:

sudo a2dismod php5

ตอนนี้เปิดใช้งาน PHP7:

sudo a2enmod php7.1

เพื่อสะท้อนถึงการเปลี่ยนแปลงที่ต้องการ Apache ให้รีสตาร์ท:

sudo systemctl restart apache2

นี่อาจทำให้โปรเจ็กต์ล้มเหลวหาก php.ini แตกต่างกัน
KawaiKx

ตรวจสอบให้แน่ใจว่ามีการติดตั้งไลบรารี php สำหรับเวอร์ชันใหม่ด้วยฉันหมายถึง gd, mcrypt, xml และอื่น ๆ
korwalskiy

2

ถ้าคุณกำลังพยายามที่จะเรียกใช้โค้ด PHP จากเว็บเซิร์ฟเวอร์ของคุณแล้วรุ่นที่คุณใช้เป็นหนึ่งที่รายงานโดยphpinfo()= 5.6.10

เซิร์ฟเวอร์ของคุณมีการติดตั้ง PHP หลายเวอร์ชันและเมื่อคุณเข้าสู่ระบบและรันphpบนบรรทัดคำสั่งคุณจะได้รับเวอร์ชันเก่าซึ่งติดตั้งไว้ที่ / usr / bin / php

เซิร์ฟเวอร์สามารถมี PHP หลายเวอร์ชันและดูเหมือนว่าคุณจะ

หากคุณต้องการดำเนินการ PHP เดียวกันกับเว็บเซิร์ฟเวอร์ของคุณด้วยตนเองคุณจะต้องค้นหาเวอร์ชันอื่น ลองใช้คำสั่งเหล่านี้:

/usr/local/bin/php -v
/opt/local/bin/php -v
/opt/bin/php -v

หนึ่งในนั้นอาจเปิดเผย PHP ที่มีเวอร์ชันเดียวกันกับเว็บเซิร์ฟเวอร์ของคุณและเมื่อคุณทราบว่าเป็นรุ่นใดคุณสามารถใช้อันนั้นแทนค่าเริ่มต้น


0

ถ้าฉันอาจเพิ่ม 2 เซ็นต์ของฉัน ...

ฉันกำลังอัปเกรดเวอร์ชัน Nextcloud ของฉัน เมื่อฉันรันโพรซีเดอร์การอัพเกรดฉันต้อง "sudo php" เป็นผู้ใช้ apache แต่มันปฏิเสธที่จะทำงานเพราะ php CLI เวอร์ชั่นที่รันตามค่าเริ่มต้นโดยผู้ใช้ apache นั้นเก่าเกินไป อย่างไรก็ตาม phpinfo (); บนเซิร์ฟเวอร์ของฉันแสดงเวอร์ชัน php ล่าสุดติดตั้ง

ฉันรู้ว่ามันเป็นเพราะตัวแปร PATH ในไฟล์ /home/apache/.bashrc ถูกตั้งค่าเป็น php รุ่นแรกที่ฉันติดตั้งบนเซิร์ฟเวอร์ของฉันและมันก็ไม่เคยอัปเดตอีกเลย (ฉันจะคอมไพล์ / ติดตั้ง php จากแหล่งบน Github เสมอ )

การแก้ไขปัญหา:

เมื่อคุณอัปเดต php บนเว็บเซิร์ฟเวอร์ของคุณและต้องการตรวจสอบให้แน่ใจว่าเวอร์ชันของ CLI php ที่ใช้นั้นเป็นเวอร์ชั่นล่าสุดเมื่อคุณ sudo เป็นผู้ใช้ apache อย่าลืมเปลี่ยนในไฟล์. bashrc ของผู้ใช้รายนี้เช่นนี้:

PATH=$PATH:/var/www/html: /usr/local/php7.1.32/bin export PATH


-1

ขั้นตอนในการแก้ไขปัญหานี้ ก่อนอื่น PHP เวอร์ชันไหนที่แสดงให้คุณเห็น

php -v

ตอนนี้คุณจะต้องใช้เส้นทาง PHP หากคุณไม่ทราบคุณสามารถติดต่อฝ่ายสนับสนุนโฮสติ้งของคุณสำหรับเส้นทาง PHP ในกรณีของฉันมันเป็น

/opt/php71/bin/php

ตอนนี้ได้เวลาเรียกใช้คำสั่งนี้ในเทอร์มินัล

alias php='/opt/php71/bin/php'

สิ่งนี้จะเปลี่ยนเวอร์ชั่น PHP เป็น PHP 7.1 หากคุณต้องการเปลี่ยนเป็น 7.2 คุณสามารถลองได้

alias php='/opt/php72/bin/php'

คุณทำเสร็จแล้ว ยืนยันด้วย

php -v

-3

สร้างเส้นทางตัวแปรสภาพแวดล้อมสำหรับ php เวอร์ชันล่าสุดเช่น C: \ wamp64 \ bin \ php \ php7.2.4 ตอนนี้เปลี่ยนโฟลเดอร์เวอร์ชัน php ก่อนหน้านี้ของคุณ. php5.6.35 เป็นหมายเลขอื่น php5.6.354 .. จากนั้นตรวจสอบ php -v wamp ของคุณ เซิร์ฟเวอร์และ cli php จะเหมือนกัน

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