Chuyển phiên bản php trên dòng lệnh ubuntu 16.04


98

Tôi đã cài đặt php 5.6 và php 7.1 trên Ubuntu 16.04 của mình

Tôi biết với Apache là máy chủ web của mình, tôi có thể làm

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

Khi tôi tắt php7.1 trong các mô-đun Apache và bật php 5.6, Apache sẽ nhận ra sự thay đổi và sử dụng trình thông dịch php 5.6 như mong đợi.

Nhưng khi tôi chạy máy chủ web php nội bộ từ dòng lệnh:

php -S localhost:8888

php xử lý các yêu cầu bằng cách sử dụng php 7. Vậy làm cách nào để chuyển đổi giữa php 5.6 và php 7.1 trong dòng lệnh?


Câu trả lời:


232

Chế độ chuyển đổi tương tác

sudo update-alternatives --config php

Chuyển đổi thủ công

Từ PHP 5.6 => PHP 7.1

PHP 5.6 mặc định được đặt trên hệ thống của bạn và bạn cần chuyển sang PHP 7.1.

Apache:

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

Dòng lệnh:

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

Từ PHP 7.1 => PHP 5.6

PHP 7.1 mặc định được đặt trên hệ thống của bạn và bạn cần chuyển sang PHP 5.6.

Apache:

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

Dòng lệnh:

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

Nguồn


1
sudo update-alternatives --set php /usr/bin/php5.6 lệnh này tiết kiệm thời gian của tôi .. cảm ơn @StevieG
Hỏi Bytes

Bạn là người anh em tốt nhất ... Cảm ơn rất nhiều.
Fendi Septiawan

Tôi đã gặp lỗi phân đoạn khi khởi động lại apache2. Sau đó, tôi thấy rằng tôi đã bật nhiều phiên bản PHP cùng một lúc. Tôi đã phải tắt cả 7.1 và 7.2 trước khi bật 5.6.
donquixote

Thật vậy, tôi vừa sử dụng giải pháp này để thay đổi php -vtừ 7.2 thành 7.1! Nó là tuyệt vời và đơn giản.
SaidbakR

Lời khuyên tuyệt vời cũng có ở đây - askubuntu.com/questions/761713/… . Nhân tiện, bạn có thể cài đặt một số mô-đun php - ví dụ: 5.6, 7.0, 7.1, 7.2 và sau đó sắp xếp chúng, nếu bạn gặp một số lỗi nhất định cho một phiên bản php nhất định (ví dụ: create_functionkhông còn được hỗ trợ bắt đầu từ php 7.2 .)
Vadim Anisimov

99

gõ điều này vào dòng lệnh của bạn, sẽ hoạt động cho tất cả ubuntu từ 16.04, 18.04 đến 20.04.

$ sudo update-alternatives --config php

và đây là những gì bạn sẽ nhận được

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:

Chọn phiên bản thích hợp


2
Đây là câu trả lời
itazzad

Tại sao php7.2 hai lần?
Sand Of Vega

@SandOfVega đây là đầu ra của lệnh và có thể hiển thị thứ gì đó 2 lần nếu tôi đoán đó là mặc định, nhưng đầu ra của bạn có thể khác.
GiorgosK

Ubuntu 20.04 cho tôi "lỗi: không có lựa chọn thay thế nào cho php"
burzum

12

Tôi thực sự không khuyên bạn nên sử dụng a2enmodcho php 5 hoặc 7. Tôi sẽ sử dụng update-alternatives. Bạn có thể thực hiện sudo update-alternatives --config phpđể đặt phiên bản PHP trên toàn hệ thống mà bạn muốn sử dụng. Điều này làm cho dòng lệnh của bạn và các phiên bản apache hoạt động giống nhau. Bạn có thể đọc thêm về update-alternativestrên trang người đàn ông .


1
Nó không làm việc cho tôi. PHPINFO vẫn luôn hiển thị cùng một phiên bản, ngay cả khi tôi đã thử chọn.
brunoramonalmeida

12

Tôi nghĩ bạn nên thử cái này

Từ php5.6 đến 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

Từ php7.1 đến 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
Đưa ra đủ lời giải thích cho câu trả lời của bạn để hiểu tại sao mã này hoạt động và ý nghĩa của nó. Vì vậy, câu trả lời sẽ hữu ích cho những người dùng có cùng vấn đề. Xem link để biết cách viết câu trả lời hay.
Jino Shaji

12

Để liệt kê tất cả các phiên bản có sẵn và chọn từ chúng:

sudo update-alternatives --config php

Hoặc làm thủ công

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

9

Bạn có thể tạo một tập lệnh để chuyển từ các phiên bản: sudo nano switch_php sau đó nhập vào đây:

#!/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 )"

thoát và lưu làm cho nó thực thi được: sudo chmod +x switch_php

Để thực thi script, chỉ cần nhập ./switch_php [VERSION_NUMBER]tham số là 7 hoặc 5.6

Vậy là xong, bây giờ bạn có thể dễ dàng chuyển đổi dạng PHP7 sang PHP 5.6!


Trông có vẻ hứa hẹn nhưng cờ 'n' làm gì trong lệnh ln khi bạn sử dụng "ln -sfn ...". Tôi không thể tìm thấy cờ ("n") đó ở bất kỳ đâu trong tài liệu.
Fakhar Anwar

8

Bạn có thể sử dụng các dòng lệnh dưới đây để chuyển đổi giữa hai phiên bản PHP.

Ví dụ

Tôi muốn chuyển PHP Versiontừ 7.1sang 7.2chúng ta có thể sử dụng lệnh dưới đây

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

a2dismodđược sử dụng để tắt phiên bản php hiện tại và a2enmodđược sử dụng để kích hoạt phiên bản


8

Có thể bạn có một phiên bản PHP cũ như PHP 5.6 trong hệ thống của mình và bạn cũng đã cài đặt PHP 7.2 để có nhiều PHP trong máy của bạn. Có một số ứng dụng được phát triển khi PHP 5.6 cũ hơn là phiên bản mới nhất, chúng vẫn hoạt động và bạn đang làm việc trên các ứng dụng đó, Bạn có thể làm việc trên Laravel đồng thời nhưng Laravel yêu cầu PHP 7+ để bắt đầu. Lấy hình ảnh?

Trong trường hợp đó, bạn có thể chuyển đổi giữa các phiên bản PHP để phù hợp với yêu cầu của mình.

Chuyển từ PHP 5.6 => PHP 7.2

Apache: -

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

Dòng lệnh:-

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

Và ngược lại, Chuyển từ PHP 7.2 => PHP 5.6

Apache: -

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

Dòng lệnh:-

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

Nhập lệnh đã cho vào thiết bị đầu cuối của bạn ..

Để tắt phiên bản PHP đã chọn ...

    • sudo a2dismod php5
    • khởi động lại dịch vụ sudo apache2
  1. Để kích hoạt phiên bản PHP khác ....

    • sudo a2enmod php5.6
    • khởi động lại dịch vụ sudo apache2

Nó sẽ nâng cấp phiên bản Php, điều tương tự ngược lại nếu bạn muốn hạ cấp phiên bản, bạn có thể xem nó bằng PHP_INFO ();


3

Chuyển từ PHP 5.6 sang PHP 7.2 bằng:

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

Chuyển từ PHP 7.2 sang PHP 5.6 bằng cách sử dụng:

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

3

Bạn có thể sử dụng các Tập lệnh chuyển mạch PHP mã nguồn mở này, được thiết kế đặc biệt để sử dụng trong Ubuntu 16.04 LTS.

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

Có một setup.shtập lệnh cài đặt tất cả các phụ thuộc bắt buộc cho PHP 5.6, 7.0, 7.1 & 7.2. Sau khi hoàn tất, bạn chỉ có thể chạy một trong các tập lệnh chuyển đổi sau để thay đổi phiên bản mô-đun PHP CLI và 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

Từ PHP 5.6 => PHP 7.1

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1

cho các phiên bản linux cũ

 $ sudo service apache2 restart

cho phiên bản mới hơn

$ systemctl restart apache2

1

vui lòng làm theo các bước:

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

Tôi đã tạo một tập lệnh bash để chuyển đổi giữa các phiên bản PHP khác nhau trên Ubuntu.

Hy vọng nó sẽ giúp một ai đó.

Đây là tập lệnh: (lưu nó trong /usr/local/bin/sphp.sh, đừng quên thêm cờ + x bằng lệnh: 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

Khi cài đặt laravel trên Ubuntu 18.04, hãy chọn cài đặt mặc định PHP 7.3.0RC3, nhưng laravel và symfony sẽ không cài đặt đúng cách và phàn nàn về lỗi php-xml và php-zip, mặc dù chúng đã được cài đặt. Bạn cần chuyển sang php 7.1, sử dụng các hướng dẫn ở trên hoặc

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

bây giờ, chạy blog mới laravel, sẽ tiến hành chính xác

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.