สลับเวอร์ชัน php บน commandline ubuntu 16.04


96

ฉันติดตั้ง php 5.6 และและ php 7.1 บน Ubuntu 16.04 แล้ว

ฉันรู้จัก Apache เป็นเว็บเซิร์ฟเวอร์ของฉันฉันสามารถทำได้

a2enmod php5.6 #to enable php5
a2enmod php7.1 #to enable php7

เมื่อฉันปิดใช้งาน php7.1 ในโมดูล Apache และเปิดใช้งาน php 5.6 Apache จะรับรู้การเปลี่ยนแปลงและใช้ตัวแปล php 5.6 ตามที่คาดไว้

แต่เมื่อฉันเรียกใช้เว็บเซิร์ฟเวอร์ php ภายในจาก commandline:

php -S localhost:8888

php จัดการคำขอโดยใช้ php 7 ดังนั้นฉันจะสลับระหว่าง php 5.6 และ php 7.1 ในบรรทัดคำสั่งได้อย่างไร


คำตอบ:


230

โหมดการสลับแบบโต้ตอบ

sudo update-alternatives --config php

การสลับด้วยตนเอง

จาก PHP 5.6 => PHP 7.1

PHP 5.6 เริ่มต้นถูกตั้งค่าในระบบของคุณและคุณต้องเปลี่ยนไปใช้ PHP 7.1

Apache:

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1
$ sudo service apache2 restart

บรรทัดคำสั่ง:

$ sudo update-alternatives --set php /usr/bin/php7.1

จาก PHP 7.1 => PHP 5.6

PHP 7.1 เริ่มต้นถูกตั้งค่าในระบบของคุณและคุณต้องเปลี่ยนไปใช้ PHP 5.6

Apache:

$ sudo a2dismod php7.1
$ sudo a2enmod php5.6
$ sudo service apache2 restart

บรรทัดคำสั่ง:

$ sudo update-alternatives --set php /usr/bin/php5.6

ที่มา


1
sudo update-ทางเลือก - ตั้งค่า php /usr/bin/php5.6 คำสั่งนี้ช่วยประหยัดเวลาของฉัน .. ขอบคุณ @StevieG
Ask Bytes

คุณเป็นพี่ชายที่ดีที่สุด ... ขอบคุณมาก
Fendi Septiawan

ฉันมีข้อผิดพลาดในการแบ่งส่วนเมื่อรีสตาร์ท apache2 จากนั้นฉันก็พบว่าฉันเปิดใช้งานเวอร์ชัน PHP มากกว่าหนึ่งครั้ง ฉันต้องปิดการใช้งานทั้ง 7.1 และ 7.2 ก่อนที่จะเปิดใช้งาน 5.6
donquixote

อันที่จริงฉันเพิ่งใช้วิธีนี้เพื่อเปลี่ยนphp -vจาก 7.2 เป็น 7.1! มันยอดเยี่ยมและเรียบง่าย
SaidbakR

คำแนะนำดีๆอยู่ที่นี่ด้วย - askubuntu.com/questions/761713/… . อย่างไรก็ตามคุณสามารถติดตั้งโมดูล php ได้หลายตัวเช่น 5.6, 7.0, 7.1, 7.2 จากนั้นเล่นปาหี่หากคุณได้รับข้อผิดพลาดบางประการสำหรับ php เวอร์ชันที่กำหนด (ตัวอย่างเช่นcreate_functionไม่ได้รับการสนับสนุนอีกต่อไปโดยเริ่มจาก php 7.2 .)
Vadim Anisimov

97

พิมพ์สิ่งนี้ในบรรทัดคำสั่งของคุณควรใช้ได้กับ Ubuntu ทั้งหมดระหว่าง 16.04, 18.04 และ 20.04

$ sudo update-alternatives --config php

และนี่คือสิ่งที่คุณจะได้รับ

There are 4 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php7.2   72        auto mode
  1            /usr/bin/php5.6   56        manual mode
  2            /usr/bin/php7.0   70        manual mode
  3            /usr/bin/php7.1   71        manual mode
  4            /usr/bin/php7.2   72        manual mode
Press <enter> to keep the current choice[*], or type selection number:

เลือกเวอร์ชันที่เหมาะสม


2
อันนี้น่าจะเป็นคำตอบ
itsazzad

ทำไม php7.2 สองครั้ง?
Sand Of Vega

@SandOfVega นี่คือผลลัพธ์ของคำสั่งและอาจแสดงบางอย่าง 2 ครั้งถ้าเป็นค่าเริ่มต้นฉันเดา แต่ผลลัพธ์ของคุณอาจแตกต่างกัน
GiorgosK

Ubuntu 20.04 ให้ "error: ไม่มีทางเลือกอื่นสำหรับ php"
burzum

12

จริงๆแล้วฉันไม่แนะนำให้ใช้a2enmodphp 5 หรือ 7 ฉันจะใช้update-alternatives. คุณสามารถsudo update-alternatives --config phpตั้งค่า PHP เวอร์ชันกว้างทั้งระบบที่คุณต้องการใช้ สิ่งนี้ทำให้บรรทัดคำสั่งและเวอร์ชัน apache ของคุณทำงานเหมือนกัน คุณสามารถอ่านเพิ่มเติมเกี่ยวกับupdate-alternativesบนหน้าคน


1
มันไม่ได้ผลสำหรับฉัน PHPINFO ยังคงแสดงเวอร์ชันเดิมเสมอแม้ว่าฉันจะลองเลือกแล้วก็ตาม
brunoramonalmeida

12

ฉันคิดว่าคุณควรลองสิ่งนี้

จาก php5.6 ถึง php7.1

sudo a2dismod php5.6
sudo a2enmod php7.1
sudo service apache2 restart

sudo update-alternatives --set php /usr/bin/php7.1
sudo update-alternatives --set phar /usr/bin/phar7.1
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.1

จาก php7.1 ถึง php5.6

sudo a2dismod php7.1
sudo a2enmod php5.6
sudo service apache2 restart

sudo update-alternatives --set php /usr/bin/php5.6
sudo update-alternatives --set phar /usr/bin/phar5.6
sudo update-alternatives --set phar.phar /usr/bin/phar.phar5.6

1
ให้คำอธิบายที่เพียงพอสำหรับคำตอบของคุณเพื่อทำความเข้าใจว่าเหตุใดรหัสนี้จึงใช้งานได้และความหมายดังนั้นคำตอบจะเป็นประโยชน์สำหรับผู้ใช้ที่มีปัญหาเดียวกัน ดูลิงก์เพื่อทราบวิธีการเขียนคำตอบที่ดี
Jino Shaji

12

ในการแสดงรายการเวอร์ชันที่มีทั้งหมดและเลือกจาก:

sudo update-alternatives --config php

หรือทำด้วยตนเอง

sudo a2dismod php7.1 // disable
sudo a2enmod php5.6  // enable

9

คุณสามารถสร้างสคริปต์เพื่อเปลี่ยนจากเวอร์ชัน: sudo nano switch_php จากนั้นพิมพ์สิ่งนี้:

#!/bin/sh
#!/bin/bash
echo "Switching to PHP$1..."
case $1 in
    "7")
        sudo a2dismod php5.6
        sudo a2enmod php7.0
        sudo service apache2 restart
        sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php;;
    "5.6")
        sudo a2dismod php7.0
        sudo a2enmod php5.6
        sudo service apache2 restart
        sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php;;
esac
echo "Current version: $( php -v | head -n 1 | cut -c-7 )"

ออกและบันทึกทำให้สามารถใช้งานได้: sudo chmod +x switch_php

ในการรันสคริปต์เพียงแค่พิมพ์./switch_php [VERSION_NUMBER]โดยที่พารามิเตอร์คือ 7 หรือ 5.6

ตอนนี้คุณสามารถเปลี่ยนจาก PHP7 เป็น PHP 5.6 ได้อย่างง่ายดาย!


ดูดี แต่แฟล็ก 'n' ทำอะไรในคำสั่ง ln เมื่อคุณใช้ "ln -sfn ... " ฉันไม่พบแฟล็กนั้น ("n") ที่ใดก็ได้ในเอกสาร
Fakhar Anwar

8

คุณสามารถใช้บรรทัดคำสั่งด้านล่างเพื่อสลับระหว่าง PHP สองเวอร์ชัน

เช่น

ฉันต้องการเปลี่ยนPHP Versionจาก7.1เป็น7.2เราสามารถใช้คำสั่งด้านล่าง

sudo a2dismod php7.1 &&  sudo update-alternatives --set php /usr/bin/php7.2 && sudo a2enmod php7.2 && sudo service apache2 restart

a2dismodใช้เพื่อปิดการใช้งานเวอร์ชัน php ปัจจุบันและa2enmodใช้เพื่อเปิดใช้งานเวอร์ชัน


8

คุณอาจมี PHP เวอร์ชันเก่าเช่น PHP 5.6 ในระบบของคุณและคุณได้ติดตั้ง PHP 7.2 ด้วยเพื่อให้มี PHP หลายตัวในเครื่องของคุณ มีแอพพลิเคชั่นบางตัวที่พัฒนาขึ้นเมื่อ PHP 5.6 ที่เก่ากว่าเป็นเวอร์ชันล่าสุดพวกมันยังใช้งานได้และคุณกำลังทำงานกับแอพพลิเคชั่นเหล่านั้นคุณอาจกำลังทำงานกับ Laravel พร้อมกัน แต่ Laravel ต้องการ PHP 7+ เพื่อเริ่มต้น รับภาพ?

ในกรณีนี้คุณสามารถสลับระหว่างเวอร์ชัน PHP เพื่อให้เหมาะกับความต้องการของคุณ

เปลี่ยนจาก PHP 5.6 => PHP 7.2

อาปาเช่: -

sudo a2dismod php5.6
sudo a2enmod php7.2
sudo service apache2 restart

บรรทัดคำสั่ง:-

sudo update-alternatives --set php /usr/bin/php7.2
sudo update-alternatives --set phar /usr/bin/phar7.2
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2
sudo update-alternatives --set phpize /usr/bin/phpize7.2
sudo update-alternatives --set php-config /usr/bin/php-config7.2

และในทางกลับกันเปลี่ยนจาก PHP 7.2 => PHP 5.6

อาปาเช่: -

sudo a2dismod php7.2
sudo a2enmod php5.6
sudo service apache2 restart

บรรทัดคำสั่ง:-

sudo update-alternatives --set php /usr/bin/php5.6
sudo update-alternatives --set phar /usr/bin/phar5.6
sudo update-alternatives --set phar.phar /usr/bin/phar.phar5.6
sudo update-alternatives --set phpize /usr/bin/phpize5.6
sudo update-alternatives --set php-config /usr/bin/php-config5.6

3

พิมพ์คำสั่งที่กำหนดในเทอร์มินัลของคุณ ..

สำหรับปิดการใช้งานเวอร์ชัน PHP ที่เลือก ...

    • sudo a2dismod php5.0
    • sudo service apache2 รีสตาร์ท
  1. สำหรับเปิดใช้งาน PHP เวอร์ชันอื่น ....

    • sudo a2enmod php5.6
    • sudo service apache2 รีสตาร์ท

จะอัปเกรดเวอร์ชัน Php สิ่งเดียวกันหากคุณต้องการดาวน์เกรดเวอร์ชันคุณสามารถดูได้โดย PHP_INFO ();


3

เปลี่ยนจาก PHP 5.6 เป็น PHP 7.2 โดยใช้:

sudo a2dismod php5.6 && sudo a2enmod php7.2 && sudo service apache2 restart

เปลี่ยนจาก PHP 7.2 เป็น PHP 5.6 โดยใช้:

sudo a2dismod php7.2 && sudo a2enmod php5.6 && sudo service apache2 restart

3

คุณสามารถใช้ PHP Switch Scripts แบบโอเพนซอร์สเหล่านี้ซึ่งออกแบบมาโดยเฉพาะเพื่อใช้ใน Ubuntu 16.04 LTS

https://github.com/rapidwebltd/php-switch-scripts

มีsetup.shสคริปต์ที่ติดตั้งการอ้างอิงที่จำเป็นทั้งหมดสำหรับ PHP 5.6, 7.0, 7.1 & 7.2 เมื่อเสร็จสิ้นคุณสามารถเรียกใช้สคริปต์สวิตช์ต่อไปนี้เพื่อเปลี่ยนเวอร์ชันโมดูล PHP CLI และ Apache 2

./switch-to-php-5.6.sh
./switch-to-php-7.0.sh
./switch-to-php-7.1.sh
./switch-to-php-7.2.sh


1

โปรดทำตามขั้นตอน:

i.e : your current version is : current_version = 7.3 , and you want to change it to : new_version = 7.2

1) sudo a2dismod php(current_version) 
2) sudo a2enmod php(new_version)
3) sudo update-alternatives --config php (here you need to select php version number) 
4) restart apache through : 
  sudo /etc/init.d/apache2 restart OR
  sudo service apache2 restart

1

ฉันสร้าง bash script เพื่อสลับระหว่าง PHP เวอร์ชันต่างๆบน Ubuntu

หวังว่ามันจะช่วยใครบางคน

นี่คือสคริปต์: (บันทึกใน /usr/local/bin/sphp.sh อย่าลืมเพิ่มธง + x ด้วยคำสั่ง: sudo chmod + x /usr/local/bin/sphp.sh)

#!/bin/bash

# Usage
if [ $# -ne 1 ]; then
  echo "Usage: sphp [phpversion]"
  echo "Example: sphp 7.2"
  exit 1
fi

currentversion="`php -r \"error_reporting(0); echo str_replace('.', '', substr(phpversion(), 0, 3));\"`"
newversion="$1"

majorOld=${currentversion:0:1}
minorOld=${currentversion:1:1}
majorNew=${newversion:0:1}
minorNew=${newversion:2:1}

if [ $? -eq 0 ]; then
  if [ "${newversion}" == "${currentversion}" ]; then
    echo "PHP version [${newversion}] is already being used"
    exit 1
  fi

  echo "PHP version [$newversion] found"
  echo "Switching from [php${currentversion}] to [php${newversion}] ... "

  printf "a2dismod php$majorOld.$minorOld ... "
  sudo a2dismod "php${majorOld}.${minorOld}"
  printf "[OK] and "

  printf "a2enmod php${newversion} ... "
  sudo a2enmod "php${majorNew}.${minorNew}"
  printf "[OK]\n"

  printf "update-alternatives ... "
  sudo update-alternatives --set php "/usr/bin/php${majorNew}.${minorNew}"
  printf "[OK]\n"

  sudo service apache2 restart
  printf "[OK] apache2 restarted\n"
else
  echo "PHP version $majorNew.$minorNew was not found."
  echo "Try \`sudo apt install php@${newversion}\` first."
  exit 1
fi

echo "DONE!"


0

คุณสามารถใช้สคริปต์ด้านล่างเพื่อสลับระหว่างเวอร์ชัน PHP ได้อย่างง่ายดายฉันได้รวมการกำหนดค่า phpize ไว้ด้วย

https://github.com/anilkumararumulla/switch-php-version

ดาวน์โหลดไฟล์สคริปต์และเรียกใช้

sh switch.sh

0

เมื่อติดตั้ง laravel บน Ubuntu 18.04 ควรติดตั้ง PHP 7.3.0RC3 เริ่มต้นที่เลือกไว้ แต่ laravel และ symfony จะไม่ติดตั้งอย่างถูกต้องเกี่ยวกับ missin php-xml และ php-zip แม้ว่าจะติดตั้งแล้วก็ตาม คุณต้องเปลี่ยนไปใช้ php 7.1 โดยใช้คำแนะนำข้างต้นหรือ

 sudo update-alternatives --set php /usr/bin/php7.1

ตอนนี้กำลังเรียกใช้บล็อกใหม่ของ laravel จะดำเนินการอย่างถูกต้อง

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