Bagaimana cara menginstal dua versi PHP dan beralih dengan mudah di antara mereka?

76

Saya ingin memiliki PHP 5.2.17 dan PHP 5.3.5 diinstal pada mesin Ubuntu saya dan beralih sesuai kebutuhan saya. Bagaimana saya bisa mencapai ini?

Debiprasad
sumber
di ubuntu ada apache.conf di / etc / apache2, saya memikirkan hal ini juga, mungkin di masa depan saya akan membuat beberapa paket itu akan sangat berguna bagi pengembang web
Anda dapat melakukan ini dengan suPHP, tidak yakin detailnya
Marco Ceppi
1
apakah ada sesuatu seperti python virtualenv untuk memiliki penempatan PHP yang bersih dan terisolasi?
lenzai
Sudahkah Anda mempertimbangkan untuk menyiapkan server Ubuntu virtual menggunakan perangkat lunak virtualisasi yang Anda gunakan tanpa busana? Saya akan terkejut jika apa yang ingin Anda lakukan tidak terlayani dengan baik (tidak ada permainan kata-kata) oleh pengaturan semacam itu.
Simon Hoare
1
Tentukan apa artinya "beralih dengan mudah". Saya menggunakan ini untuk bekerja: server web saya menggunakan PHP .phpdan .php5file yang berbeda. Anda juga dapat mengonfigurasi server WWW Anda untuk menggunakan versi PHP yang berbeda untuk port yang berbeda (seperti http://localhost:80dan http://localhost:8080) atau domain yang berbeda (seperti http://localphp52dan http://localphp53) membiarkan semua struktur folder yang tersisa tetap utuh sehingga Anda dapat dengan mudah membandingkan menjalankan satu aplikasi web di dua lingkungan dengan mengubah arus URL.
cprn

Jawaban:

61

Anda dapat menggunakan pengelola versi php untuk mencapai ini. Manajer versi yang berbeda tersedia seperti:

Favorit saya adalah phpbrew. Semoga ini membantu.

aneeshep
sumber
2
Terima kasih, bisakah Anda memasukkan instruksi? (onnu vishadheekarikkamo?)
Tachyons
17
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Nanne
2
Cukup periksa tautan mereka memiliki dokumentasi yang sangat bagus di situs mereka. Apakah Anda benar-benar ingin saya menyalin-menempelkan sesuatu dari situs web mereka?
aneeshep
7
Ironisnya, salah satu alasan untuk tidak hanya memposting tautan adalah tautan, dari mana posting ini sekarang menderita.
MirroredFate
@aneeshep, bukan salin-tempel dokumentasinya, tetapi kutipan yang relevan dan beberapa baris tentang apa itu "manajer versi php" dan bagaimana menggunakan / mengkonfigurasinya untuk masalah khusus itu akan benar-benar diterima.
Matthieu
20

Anda dapat menjalankan 2 versi PHP yang berbeda sekaligus, tetapi tidak semudah hanya mendapatkannya. Anda perlu menjalankan satu versi yang diinstal secara terpisah dan menyajikannya sesuai dengan pengaturan di konfigurasi apache Anda.

Anda dapat melakukan ini menggunakan fastcgi misalnya: pada dasarnya yang Anda cari adalah konfigurasi yang Anda lihat di halaman ini . Anda menambahkan pawang yang berbeda di konfigurasi Anda berdasarkan situasi / port / domain yang Anda butuhkan. Caranya, setelah menginstal kedua versi, adalah langkah ini:

=== dari halaman itu ==

  1. Langkah terakhir adalah membuat host virtual. Pada akhirnya saya memiliki tiga file di / etc / apache2 / sites-enabled: 000-default, php5.3.17 dan php5.4.7 Dengan konten berikut

default:

    <VirtualHost *:80>
      ServerName localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>

php5.3.17:

    <VirtualHost *:80>
      ServerName 5317.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>

php5.4.7:

    <VirtualHost *:80>
      ServerName 547.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php547.fcgi
      </Directory>
    </VirtualHost>

Lihat untuk instalasi lengkap pertanyaan terkait . Jangan lupa untuk melihat kedua tautan di tajuk juga, mereka terlihat seperti tutorial yang bagus (tapi tidak terlalu padat). Ini dan itu

(jangan dilupakan oleh fakta bahwa pertanyaan yang ditautkan adalah pertanyaan besar tanpa jawaban yang diterima. Metode ini seharusnya (dan memang) berfungsi dengan baik, tetapi pengguna lupa untuk menggunakan <?phpdan menggunakan <?dengan shorttags off, lihat komentar)

Nanne
sumber
13

Saya menginstal php 5.6 dan 7.0 tetapi selain semua tips itu tetap menjalankan 5.6, jadi perintah ini menghemat hari (dalam kasus saya saya memilih opsi 1 dan restart apache):

sudo update-alternatives --config php
Marcelo Ágil
sumber
akan berguna untuk mengingat penggunaan phpinfo()dan php -vuntuk mencentang karena keduanya dapat memiliki nilai yang berbeda.
Adi Prasetyo
6

Yang ini cocok untuk saya: https://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

Sama seperti skrip dari "Growling Flea", tetapi menggunakan versi baru.

Tambahkan PPA

Paket PHP 5.6 dan PHP 7.0 berasal dari PPA pihak ketiga, tidak disediakan oleh repositori Ubuntu resmi dari Canonical. PPA yang saya rekomendasikan di sini adalah dari Ondřej Surý yang memaketkan PHP untuk Debian (yang kemudian digunakan oleh Ubuntu) jadi meskipun ini bukan repositori resmi, dia tidak sepenuhnya acak! PPA itu sendiri ada di sini

Untuk menambahkan PPA ke pengaturan Anda:

sudo add-apt-repository ppa:ondrej/php  

Maka kami juga ingin mengambil informasi tentang apa yang ditawarkan dari PPA baru ini, jadi jalankan:

sudo apt-get update   

Instal versi PHP baru

Saya sudah memiliki beberapa paket php5 yang diinstal, tetapi saya tidak menghapus instalasi apa pun, saya hanya membiarkan pekerjaan apa yang ingin dilakukan ketika saya memintanya untuk menginstal versi baru:

sudo apt-get install php5.6 php7.0

Hal ini mengakibatkan banyak keluhan dari apt dan banyak konflik. Resolusi yang disarankan pertama adalah untuk menghapus semua paket stok php5 sehingga PHP 5.6 dapat diinstal - jadi saya hanya menerima saran pertama.

Saya menggunakan apache sehingga pengaturan ini memberi saya apache dengan modul php5.6 dan php7.0 tersedia, dan modul php5.6 benar-benar dimuat.

Selain hanya PHP itu sendiri, semua ekstensi dan alat lain yang Anda harapkan dengan PHP ada untuk kedua versi PHP sehingga sangat mudah untuk menambahkan dalam modul yang Anda butuhkan. Saya sangat, sangat terkesan dengan betapa baiknya hal ini dilakukan.

Mengkonfigurasi dan beralih versi

Sekarang Anda memiliki dua versi PHP yang sepenuhnya terpisah yang diinstal pada sistem Anda, jadi mari kita lihat ke mana perginya semua bagian itu!

File konfigurasi semuanya ada di dalam /etc/php/5.6dan /etc/php/7.0 masing-masing - di dalam sini adalah tempat Anda dapat mengonfigurasi ekstensi mana yang dimuat, mengatur pengaturan ini, dan segala sesuatu lainnya untuk setiap versi secara terpisah.

Saya pengguna apache, dan seperti yang saya sebutkan kedua modul tersedia. Jadi untuk beralih dari satu ke yang lain yang perlu saya lakukan:

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

Untuk pengguna nginx, perubahannya hampir sama mudahnya, Digital Ocean memiliki dokumentasi yang bagus mengenai hal ini (mereka memang memiliki dokumen hebat!) Jadi lihat panduan mereka: https://www.digitalocean.com/community/tutorials/how-to- upgrade-ke-php-7-on-ubuntu-14-04 karena termasuk bagian tentang mengkonfigurasi ulang nginx untuk menggunakan versi lain dari PHP.

Dari baris perintah, saya memiliki php5.6 dan php7.0 tersedia sebagai perintah. Saya juga masih memiliki perintah php - lihat di / etc / alternatif untuk melihat bahwa itu terkait dengan versi tertentu dari PHP cli *. Anda juga dapat dengan cepat memeriksa mana yang Anda gunakan dengan menjalankan php -v.

* lebih khusus, jalankan php mana untuk melihat versi PHP mana yang sedang digunakan - tetapi ini mungkin akan mengarah ke /usr/bin/php, yang bagi saya itu sendiri merupakan symlink ke /etc/alternatives/phpperintah.

Bekerja dengan ekstensi

PPA ini dilengkapi dengan paket php-pear biasa yang menawarkan perintah pecl untuk kedua versi PHP, sehingga setiap ekstensi yang tersedia melalui PECL dapat diinstal dengan cara biasa. Anda juga akan membutuhkan tajuk yang relevan sehingga php5.6-dev atau php7.0-dev harus diinstal.

Ketika instalasi pecl selesai, Anda akan mendapatkan catatan untuk menambahkan file * .so ke php.ini Anda; sebenarnya hal terbaik untuk dilakukan di sini adalah melihat apa yang ada di dalamnya /etc/php/mods-available. Akan ada beberapa modul di sini, masing-masing dalam file sendiri dinamai ekstensi dan berakhiran .ini. Anda dapat menyalin satu untuk digunakan sebagai templat atau membuat milik Anda dan meletakkan semua konfigurasi yang relevan untuk ekstensi di dalamnya (minimal, Anda perlu extension=[extensionName].so).

Setelah ekstensi baru tersedia dalam mod, aktifkan kemudian periksa dengan melakukan:

sudo phpenmod extension  
php -m  

Ini akan membuat symlink di tempat yang tepat untuk versi PHP Anda saat ini untuk memuat modul ini, dan Anda akan melihatnya di daftar modul keluaran oleh php -m. Pro tip: jika Anda tidak melihatnya di output, gulirkan semua ke bagian atas output dan lihat apakah ada pesan kesalahan yang berguna di sana.

Daniel Pineda
sumber
3

Dari posting ini , saya hanya mengatur perintah dan menjelaskan agar saya dilayani (Ubuntu 12.04)

Metode ini memberi Anda:

  1. skrip dengan menu, yang memungkinkan peralihan antara versi php yang diinstal (tidak keduanya sekaligus)

  2. berbagai versi PHP diinstal di server Anda

  3. file conf yang dipisahkan

Instal semua versi yang Anda butuhkan (saya punya dua)

Instal dependensi:

sudo apt-get install flex apache2-threaded-dev libxml2-dev apache2 apache2-mpm-prefork apache2-threaded-dev apache2-utils apache2.2-bin apache2.2-common

Instal PHP 5.3 pertama kali. Unduh sumber php

md5sum Downloads/php-5.3.10.tar.bz2
mkdir ~/Sources
cd ~Sources/
cp -Rf ../Downloads/php-5.3.10.tar.bz2 .
tar xjf php-5.3.10.tar.bz2
cd php-5.3.10/
sudo mkdir /usr/local/php/php_5.3.10

Instal PHP5.6 pertama kali. Unduh sumber php

md5sum Downloads/php-5.6.11.tar.bz2
mkdir ~/Sources
cd ~Sources/
cp -Rf ../Downloads/php-5.6.11.tar.bz2 .
tar xjf php-5.6.11.tar.bz2
cd php-5.6.11/
sudo mkdir /usr/local/php/php-5.6.11

PHP versi manajer skrip: Buat file yang dipanggil php.shdan masukkan /bin/:

#!/bin/bash
opcion=0
cat << CABECERAMENU
Opciones del menu
1 => PHP 5.3.10
2 => PHP 5.6.11
CABECERAMENU
echo -n "Ingrese su eleccion: "
read opcion
echo
case $opcion in
    "1")
        rm /etc/apache2/php.conf
        ln -s /usr/local/php/php_5.3.10.conf /etc/apache2/php.conf
        /etc/init.d/apache2 restart
    ;;
    "2")
        rm /etc/apache2/php.conf
        ln -s /usr/local/php/php_5.6.11.conf /etc/apache2/php.conf
        /etc/init.d/apache2 restart
    ;;
    *)
        echo "Opcion no valida"
    ;;
esac

Kompilasi dan instal php 5.3:

cd ~/Sources/php-5.3.10/
sudo ./configure --prefix=/usr/local/php/php_5.3.10 --with-config-file-path=/usr/local/php/php_5.3.10/lib --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-apxs2=/usr/bin/apxs2 --enable-zip --with-gd --with-curl --with-xmlrpc --with-freetype-dir=/usr/lib/x86_64-linux-gnu  --with-jpeg-dir=/usr/lib/x86_64-linux-gnu --with-pdo-mysql --with-pdo-pgsql --enable-soap
sudo make clean
sudo make
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/lib/apache2/modules/libphp5.*
sudo make install
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/local/php/php-5.3.10/modules/libphp5.so
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.3.10/modules/
ls -lhart /usr/local/php/php_5.3.10/modules/
sudo a2dismod php5
sudo service apache2 restart

Kompilasi dan instal php 5.6

cd ~/Sources/php-5.6.11
sudo ./configure --prefix=/usr/local/php/php_5.6.11 --with-config-file-path=/usr/local/php/php_5.6.11/lib --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-apxs2=/usr/bin/apxs2 --enable-zip --with-gd --with-curl --with-xmlrpc --enable-calendar --enable-sockets --with-freetype-dir=/usr/lib/x86_64-linux-gnu  --with-jpeg-dir=/usr/lib/x86_64-linux-gnu --with-pdo-mysql  --with-pdo-pgsql --enable-soap
sudo make clean
sudo make
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/lib/apache2/modules/libphp5.*
sudo make install
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/local/php/php_5.6.11/modules/libphp5.so
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.6.11/modules
ls -lhart /usr/local/php/php_5.6.11/modules
sudo a2dismod php5
sudo service apache2 restart

Mari kita gunakan:

$ sudo php.sh
Opciones del menu
1 => PHP 5.3.10
2 => PHP 5.6.11
Ingrese su eleccion: 1

 * Restarting web server apache2                                                                                                                                                                                                                                        apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
PegasusOnlin
sumber
2

Masalah:

  1. Contoh single apache tidak dapat menjalankan dua versi PHP yang berbeda secara bersamaan (setidaknya sejauh yang saya tahu).

  2. Dua versi PHP yang berbeda tidak dapat diinstal dari paket karena akan bertentangan (dan coba timpa direktori yang sama).

Larutan:

  • untuk b) Mengkompilasi versi PHP "yang lain" dari sumber, secara manual (atau jika Anda lebih suka, ambil sumber paket yang sesuai dan modifikasi untuk menghindari konflik dan untuk memodifikasi jalur pemasangan)

  • untuk a) Buat set konfigurasi terpisah untuk apache dengan lintasan modul yang berbeda dan skrip startup yang terpisah. Dan tentu saja menjalankannya di port terpisah.

Mekk
sumber
tidak ada skrip prepackaged untuk mengkompilasi beberapa instance php parallele ini? Hanya untuk melakukannya secara manual dan menambal jalur? Jadi ini berarti bahwa semua perusahaan hosting mengembangkan skrip khusus di sana untuk menjalankan versi paralel ini dan tidak pernah berbagi upaya mereka.
lenzai
4
Sebuah instance apache tunggal dapat menjalankan 2 versi php sekaligus.
Nanne
1

Alih-alih membuat beberapa, VirtualHostsaya hanya menambahkan kode di bawah ini di .htaccessfile saya dan ternyata berhasil,

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>

Node: Saya sudah menginstal php7.2-fpmsebelum menggunakan kode.

Rohan Kumar
sumber
0

Jika Anda ingin menjalankannya secara bersamaan, Anda memerlukan dua port yang berbeda. Mungkin Anda bisa mengubah konfigurasi apache Anda (httpd.conf) dengan skrip sederhana yang memindahkan satu atau versi lain ke posisi yang benar sebelum memulai apache.

Martin Ueding
sumber
1
Saya sudah menginstal PHP 5.3.5. Bagaimana saya menginstal PHP 5.2.17? Bisakah Anda memberi tahu saya di mana dan apa yang harus saya ubah untuk beralih di antara dua versi ini? File httpd.conf kosong di instalasi saya.
Debiprasad
0

Anda juga dapat menjalankan setiap situs web dengan pengguna diferentes. Lebih aman.

Saya menggunakan pendekatan ini satu kali.

http://blog.servergrove.com/2011/08/22/how-to-setup-multiple-php-versions-on-apache/

Sekarang saya pikir lebih baik menggunakan php-fpm ... tetapi sedikit lebih rumit untuk mengkonfigurasi beberapa versi php.

Perlu menjalankan beberapa php-fpms dan mengatur apache untuk saling menggunakan.

Henrique Fernandes
sumber
3
Selamat Datang di Tanya Ubuntu! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
user98085
Saya tidak punya cukup waktu untuk melakukan apa yang Anda katakan. Saya kira, saya hanya ingin menunjukkan jalan. Masih perlu belajar cara menggunakan hal-hal formating. Bagaimanapun, terima kasih!
Henrique Fernandes
0

Saya menulis skrip bash yang memungkinkan saya untuk dengan mudah beralih di antara versi php yang diinstal pada kotak saya. Saya menjalankan beberapa host virtual karena saya memiliki beberapa proyek web dengan pelanggan yang memiliki program lama dan baru. Beberapa proyek ini membutuhkan versi php yang lebih lama dan proyek lainnya memerlukan php7.0.

Baca komentar saya dan pastikan Anda mengerti apa yang terjadi sebelum menggunakan ini.

#!/bin/bash
# This file is for switching php versions.  
# To run this file you must use bash, not sh
# 
# OS: Ubuntu 14.04 but should work on any linux
# Example: bash phpswitch.sh 7.0
# Written by Daniel Pflieger
# growlingflea at g mail dot com

NEWVERSION=$1  #this is the git directory target

#get the active php enabled mod by getting the array of files and store
#it to a variable
VAR=$(ls /etc/apache2/mods-enabled/php*)

#parse the returned variables and get the version of php that is active.
IFS=' ' read -r -a array <<< "$VAR"
array[0]=${array[0]#*php}
array[0]=${array[0]%.conf}


#confirm that the newversion veriable isn't empty.. if it is tell user 
#current version and exit
if [ "$NEWVERSION" = "" ]; then
echo current version is ${array[0]}.  To change version please use argument
exit 1
fi 

OLDVERSION=${array[0]}
#confirm to the user this is what they want to do
echo "Update php"  ${OLDVERSION} to ${NEWVERSION}


#give the user the opportunity to use CTRL-C to exit ot just hit return
read x

#call a2dismod function: this deactivate the current php version
sudo a2dismod php${OLDVERSION}

#call the a2enmod version.  This enables the new mode
sudo a2enmod php${NEWVERSION} 

echo "Restart service??"
read x

#restart apache
sudo service apache2 restart
Kutu Berkembang
sumber
0

Saya memiliki masalah yang sama ketika saya menangani banyak proyek. Saya merujuk artikel ini. Tapi rasanya setiap kali saya perlu beralih versi jika perlu tetapi ini memberikan fleksibilitas untuk cli dan web secara terpisah.

Pindah Dari php5.6 ke php7.0

Untuk Apache, kita dapat menggunakan perintah sebagai:

sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart

Untuk CLI, kita dapat menggunakan perintah sebagai:

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

Pindah Dari php7.0 ke php5.6

Untuk Apache, kita dapat menggunakan perintah sebagai:

sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart

Untuk CLI, kita dapat menggunakan perintah sebagai:

sudo update-alternatives --set php /usr/bin/php5.6
Shivdhwaj Pandey
sumber
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah. - Dari Ulasan
waltinator
@waltinator Terima kasih atas ulasannya, pasti akan membereskan ini
Shivdhwaj Pandey
0

Ini dapat dilakukan dengan menonaktifkan dan mengaktifkan versi baru PHP-

  • beralih ke versi yang lebih lama -
    a2dismod php7.0
    service apache2 restart
  • beralih ke versi yang lebih baru
    a2enmod
    layanan php7.0 restart apache2
Vikas Chauhan
sumber