PHP'nin iki sürümü nasıl kurulur ve bunlar arasında kolayca geçiş yaparsınız?

71

Ubuntu makinemde hem PHP 5.2.17 hem de PHP 5.3.5'in yüklü olmasını ve benim gereksinimime göre değiştirilmesini istiyorum. Bunu nasıl başarabilirim?

    
sordu Debiprasad 24.06.2011 14:07

11 cevap

55

Bunu başarmak için bir php sürüm yöneticisi kullanabilirsiniz. Farklı sürüm yöneticileri şu şekilde kullanılabilir:

Favoriim phpbrew. Umarım bu yardımcı olur.

    
verilen cevap aneeshep 03.02.2013 08:32
18

2 farklı PHP sürümünü bir kerede çalıştırabilirsin, ancak sadece onları bulmak kadar kolay değil. Ayrı olarak yüklenmiş bir sürümü çalıştırmanız ve apache yapılandırmanızdaki ayarlara göre sunmanız gerekir.

Örneğin, fastcgi'yi kullanarak bunu yapabilirsiniz: temel olarak aradığınız şey bu sayfa . Gereksinim duyduğunuz duruma / bağlantı noktasına / etki alanına göre yapılandırmanıza farklı bir işleyici eklersiniz. Her iki sürümü de yükledikten sonra hile şu adımdır:

=== bu sayfadan ==

  
  1. Son adım sanal konaklar yaratmaktı. Sonunda / etc / apache2 / site-etkin üç dosyam var: 000-default, php5.3.17 ve   php5.4.7 Aşağıdaki içeriklerle
  2.   

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>

Tam yükleme için bağlantılı soruya bakın. Başlıktaki iki bağlantıya da bakmayı unutmayın, güzel öğreticiler (daha az sıkıştırılmış) gibi görünüyorlar. Bu ve That

(Bağlantılı soru, kabul edilmiş bir yanıtı olmayan büyük bir soru olduğu gerçeğini göz ardı etmeyin. Yöntem iyi çalışmalı ve iyi çalışıyor, ancak kullanıcı <?php kullanmayı ve <? kullanmayı unuttu. shorttags kapalı, yorumlara bakın)

    
verilen cevap Nanne 01.02.2013 11:45
11

php 5.6 ve 7.0'ı yükledim, ancak tüm ipuçlarının yanı sıra 5.6'yı çalıştırmaya devam ettim, bu yüzden bu komut günü kaydeder (benim durumumda seçenek 1'i seçip apache'yi yeniden başlatırım):

sudo update-alternatives --config php
    
verilen cevap Marcelo Ágil 19.03.2017 15:06
5

Bu benim için çalışıyor: İşte

"Growling Flea" 'dan gelen komut ile aynı, ancak yeni sürümler kullanıyor.

  

PPA’yı ekleyin

     

PHP 5.6 ve PHP 7.0 paketleri üçüncü taraf bir PPA'dan değil   Kanonikal resmi Ubuntu depoları tarafından sağlanan. PPA'lar   Ben burada tavsiye ediyorum Debian için PHP paketleri Ondřej Surý   (bu daha sonra Ubuntu tarafından kullanılır) bu yüzden resmi değilken   depo, tam olarak rastgele değil! PPA'nın kendisi    burası

     

PPA’yı kurulumunuza eklemek için:

sudo add-apt-repository ppa:ondrej/php  
     

Ardından, teklifin ne olduğu hakkında bilgi almak istiyoruz.   Bu yeni PPA, o zaman çalıştırın:

sudo apt-get update   
     

Yeni PHP sürümleri yükle

     

Zaten php5 paketlerinden bazılarını yükledim, ama yapmadım   bir şey kaldır, sadece ne zaman ne yapmak istediğini çalışmasına izin ver   Yeni sürümleri yüklemesini istedim:

sudo apt-get install php5.6 php7.0
     

Bu, apt ve çok sayıda çatışmadan şikayetçiydi.   İlk önerilen çözüm tüm stok php5'in kaldırılmasıydı.   paketler böylece PHP 5.6 yüklenebilir - bu yüzden kabul ettim   ilk öneri.

     

Apache kullanıyorum bu yüzden bu kurulum hem php5.6 hem de php7.0 ile apache verdi   kullanılabilir modüller ve php5.6 modülü aslında yüklenir.

     

Sadece PHP'nin yanı sıra, tüm uzantılar ve diğer araçlar   PHP ile her iki sürümü için bekliyoruz, bu yüzden çok   İhtiyacınız olan modüllere eklemek kolay. Çok etkilendim   Bu ne kadar güzel yapılır.

     

Sürümleri yapılandırma ve değiştirme

     

Artık, bilgisayarınızda PHP'nin tamamen ayrı iki sürümü var.   sistem, o zaman tüm parçaların nereye gittiğine bakalım!

     

Yapılandırma dosyalarının tümü /etc/php/5.6 ve /etc/php/7.0 dizinindedir.   sırasıyla - içeride hangi uzantıları yapılandıracağınız   yüklendi, ini ayarlarını ve her sürüm için diğer her şeyi ayarla   izolasyonda.

     

Ben bir apache kullanıcısıyım ve her iki modülden de bahsettiğim gibi. Yani   Birinden diğerine geçmek için yapmam gerekenler:

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

nginx kullanıcıları için, değişiklikler neredeyse kolay, Dijital Okyanus var   bu konuda iyi belgeler (harika dokümanlar var!)   onların rehberi:    İşte   başka bir sürümü kullanmak için nginx'i yeniden yapılandırma hakkında bir bölüm içerdiği için   PHP.

     

Komut satırından hem php5.6 hem de php7.0’ın   emreder. Ayrıca bir php komutum var - / etc / alternatives'e bakıyorum   PHP'nin belirli bir sürümüne * bağlı olduğunu görmek için *. Yapabilirsin   Ayrıca, php -v dosyasını çalıştırarak hanginizin kullandığını hızlı bir şekilde kontrol edin.

     

& Sons; ast; daha spesifik olarak, PHP'nin hangi sürümünün kullanıldığını görmek için hangi php'yi çalıştırın - ancak bu muhtemelen /usr/bin/php değerini gösterir.   ben, /etc/alternatives/php komutunun kendisinin bir linkidir.

     

Uzantılarla çalışma

     

Bu PPA, pecl sunan her zamanki php-armut paketiyle birlikte gelir.   PHP'nin her iki sürümü için komut, böylece mevcut olan herhangi bir uzantı   PECL üzerinden normal şekilde kurulabilir. Ayrıca ihtiyacınız olacak   İlgili üstbilgiler php5.6-dev veya php7.0-dev olmalıdır   yüklü.

     

Pecl yüklemesi tamamlandığında, eklenecek bir not alırsınız.   php.ini dosyanıza * .so dosyası; Aslında burada yapılacak en iyi şey /etc/php/mods-available cinsinden ne olduğuna bakmaktır. Biraz olacak   modüller zaten burada, her biri kendi dosyasında uzantısından sonra   ve .ini ile biten. Şablon olarak kullanmak için birini kopyalayabilir veya oluşturabilirsiniz   kendiniz ve uzantı için ilgili tüm yapılandırmayı koyun   (minimum olarak, extension=[extensionName].so 'ye ihtiyacınız var.)

     

Yeni uzantı modda olduğunda, etkinleştirin ve ardından kontrol edin   yaparak:

sudo phpenmod extension  
php -m  
     

Bu, geçerli yerlerdeki doğru yerlerde sembolik bağlantılar yaratacaktır.   Bu modülü yüklemek için PHP sürümü ve listede görmelisiniz   modül çıkışının php -m 'si ile. Profesyonel ipucu: bunu görmüyorsanız   çıktı, çıktının en üstüne kadar ilerleyin ve varsa görün   orada herhangi bir yararlı hata mesajı var.

    
verilen cevap Daniel Pineda 20.05.2017 10:08
3

Bu gönderiden , Ben sadece komutları sıraya koyup hizmet ettiğim sırada açıkladım (Ubuntu 12.04)

Bu yöntem size şunları sağlar:

    Kurulmuş php sürümleri arasında geçiş yapmasına izin veren, menü ile birlikte
  1. komut dosyası (her ikisinde de aynı anda değil)

  2. sunucunuzda yüklü çeşitli PHP sürümleri

  3. conf dosyaları ayrılmış

İhtiyacınız olan tüm sürümleri yükleyin (iki tane var)

Bağımlılıkları yükle:

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

İlk kez PHP 5.3 yükleyin. Php kaynaklarını indir

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

İlk kez PHP5.6'yı yükleyin. Php kaynaklarını indir

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

Komut dosyası yöneticisi sürümleri PHP: php.sh adlı bir dosya oluşturun ve /bin/ 'ye yerleştirin:

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

Php 5.3’ü derleyin ve kurun:

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

php 5.6'yı derleyin ve kurun

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

Onları kullanalım:

$ 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
    
verilen cevap PegasusOnlin 30.08.2016 13:26
2

Sorunların:

  1. Tek apache örneği aynı anda iki farklı PHP sürümünü çalıştıramaz (en azından bildiğim kadarıyla).

  2. İki farklı PHP sürümü paketlerden yüklenemez, çünkü bunlar çakışır (ve aynı dizinlerin üzerine yazmayı deneyin).

Çözüm:

  • b) Diğer "PHP" kaynağını el ile kaynağından derleyin (ya da tercih ederseniz, uygun paketin kaynağını yakalayın ve çakışmalardan kaçınmak ve yükleme yollarını değiştirmek için değiştirin)

  • a) Farklı modül yolları ve ayrı başlangıç ​​komut dosyasıyla birlikte apache için ayrı yapılandırma dizileri oluşturun. Ve tabi ki ayrı bir limanda çalıştırın.

verilen cevap Mekk 28.03.2012 18:17
0

Aynı anda çalıştırmak istiyorsanız, iki farklı bağlantı noktasına ihtiyacınız vardır. Belki apache yapılandırmanızı (httpd.conf) apache'yi başlatmadan önce bir veya daha fazla sürümü doğru konuma getiren basit bir betikle değiştirebilirsiniz.

    
verilen cevap Martin Ueding 24.06.2011 14:13
0

Ayrıca, her web sitesini diferentes kullanıcılarıyla da çalıştırabilirsiniz. Daha güvenli.

Bu yaklaşımı bir keresinde kullandım.

İşte

Şimdi php-fpm kullanmanın daha iyi olduğunu düşünüyorum ... ancak birden çok php sürümünü yapılandırmak için daha karmaşık bir litre.

Katları php-fpms komutunu çalıştırmalı ve apache kullanmalıdır.

    
verilen cevap Henrique Fernandes 02.02.2013 23:57
0

Kutuya yüklenmiş php sürümleri arasında kolayca geçiş yapmamı sağlayan bir bash komut dosyası yazdım. Birkaç sanal ana bilgisayar çalıştırıyorum çünkü eski ve yeni programlara sahip müşterilerle birkaç web projem var. Bu projelerden bazıları php ve diğer projelerin eski sürümlerini gerektirir php7.0 gerektirir.

Yorumlarımı okuyun ve bunu kullanmadan önce neler olduğunu anladığınızdan emin olun.

#!/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=  #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
    
verilen cevap Growling Flea 14.02.2017 05:30
0

Birden fazla VirtualHost yapmak yerine .htaccess dosyasında aşağıdaki kodu ekledim ve şaşırtıcı bir şekilde çalıştım,

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

Düğüm: Kodu kullanmadan önce php7.2-fpm 'i zaten yüklemiştim.

    
verilen cevap Rohan Kumar 25.05.2018 13:59
0

Birden fazla projeyi kullanırken aynı sorunu yaşadım. bu makale  Ama ihtiyaç duyulduğunda sürümleri değiştirmem gerekiyordu ama bu, kli ve web için ayrı ayrı esneklik sağlıyor.

php5.6'dan php7.0’a geçme

Apache için şu komutu kullanabiliriz:

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

CLI için şu komutu kullanabiliriz:

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

php7.0’dan php5.6’ya geçme

Apache için şu komutu kullanabiliriz:

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

CLI için şu komutu kullanabiliriz:

sudo update-alternatives --set php /usr/bin/php5.6
    
verilen cevap Shivdhwaj Pandey 28.05.2018 22:31

Etiketlerdeki diğer soruları oku