İki PHP sürümü nasıl kurulur ve bunlar arasında kolayca geçiş yapılır mı?


76

Ubuntu makinemde hem PHP 5.2.17 hem de PHP 5.3.5 yüklü olması ve ihtiyacım doğrultusunda değiştirmemi istiyorum. Bunu nasıl başarabilirim?


ubuntu'da / etc / apache2'de apache.conf var, bunun hakkında da düşündüm, belki gelecekte web geliştiricileri için çok faydalı olacağı bir paket yapacağım

Bunu suPHP ile yapabilirsiniz, ayrıntılardan emin değilsiniz
Marco Ceppi

1
PHP'nin temiz bir şekilde konuşlandırılması için python virtualenv gibi bir şey var mı?
lenzai

Başsız bir şekilde kullandığınız sanallaştırma yazılımını kullanarak sanal Ubuntu sunucularını kurmayı düşündünüz mü? Yapmak istediğiniz şeye böyle bir kurulum tarafından iyi hizmet edilmemesi (amaçlanan bir ceza) yoksa şaşırırdım.
Simon Hoare

1
"Kolayca geçiş yapmanın" ne anlama geldiğini tanımlayın. Bunu iş için kullandım: web sunucum .phpve .php5dosyaları için farklı PHP kullanıyordu . Ayrıca farklı portlar için farklı PHP sürümlerini (gibi kullanmak üzere WWW sunucusunu yapılandırabilir http://localhost:80ve http://localhost:8080) ya da farklı etki (gibi http://localphp52ve http://localphp53akımı değiştirerek bunu kolayca iki ortamlarda bir web uygulamasını çalıştıran karşılaştırabilirsiniz) bozulmamış klasörlerin kalan tüm yapısını bırakarak URL.
cprn

Yanıtlar:


61

Bunu başarmak için bir php sürüm yöneticisi kullanabilirsiniz. Gibi farklı sürüm yöneticileri mevcuttur:

Benim favorim phpbrew. Bu yardımcı olur umarım.


2
Teşekkürler, lütfen talimatları ekleyebilir misiniz? (? onnu vishadheekarikkamo)
TACHYON'lardı

17
Bu soruyu teorik olarak cevaplayabilse de , cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak tercih edilir.
Nanne

2
Sadece sitelerinde gerçekten çok iyi belgeleri olan linkleri kontrol edin. Gerçekten bir şeyleri kendi Web sitesinden kopyala yapıştırmamı mı istiyorsun?
aneeshep

7
İronik olarak, sadece bağlantı göndermeme nedenlerinden biri, bu yazının şimdi yaşadığı linkrot'tur.
MirroredFate

@aneeshep, belgelerini kopyala-yapıştır değil, ilgili alıntılar ve bir "php sürüm yöneticisi" nedir ve bu özel problem için nasıl kullanılacağı / yapılandırılacağı ile ilgili birkaç satır.
Matthieu

20

Sen edebilirsiniz seferde 2 farklı PHP sürümleri çalıştırmak, ama sadece apt-adaya götürmek kadar kolay değil. Ayrı ayrı kurulmuş bir sürümü çalıştırmanız ve apache yapılandırmanızdaki ayarlara göre sunmanız gerekir.

Örneğin fastcgi kullanarak bunu yapabilirsiniz: temel olarak aradığınız şey bu sayfada gördüğünüz yapılandırmadır . Konfigürasyonunuza ihtiyacınız olan duruma / port / etki alanına göre farklı bir işleyici eklersiniz. Her iki sürümü de yükledikten sonra püf noktası bu adımdır:

=== o sayfadan ==

  1. Son adım, sanal ana bilgisayarlar oluşturmaktı. Sonunda / etc / apache2 / sites-etkin üç dosyam var: 000-default, php5.3.17 ve php5.4.7 Aşağıdaki içeriklerle

varsayılan:

    <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>

Bağlantılı soruya tam kurulum için bakınız . Başlıktaki iki bağlantıya bakmayı da unutmayın, güzel dersler gibi görünürler (ancak daha az sıkıştırılmış). Bu ve Bu

(Bağlantılı sorunun kabul görmüş bir cevabı olmayan büyük bir soru olduğu gerçeğine değinmeyin . Bu yöntem iyi çalışmalı (ancak çalışmalı), ancak kullanıcı kullanmayı <?phpve kısa <?etiketlerle kullanmayı unutmuş , yorumları görün)


13

Php 5.6 ve 7.0 kurdum ancak tüm ipuçlarının yanı sıra 5.6 çalıştırmaya devam ettim, bu yüzden bu komut günü kurtarıyor (benim durumumda seçenek 1'i seçtim ve apache'yi yeniden başlattım):

sudo update-alternatives --config php

Her ikisinin de farklı bir değeri olabileceğinden, kullanımı hatırlamak phpinfo()ve php -vkontrol etmek yararlıdır .
Adi Prasetyo

6

Bu benim için çalışıyor: https://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

"Growling Flea" bölümündeki senaryo ile aynı, ancak yeni sürümler kullanılıyor.

PPA ekleyin

PHP 5.6 ve PHP 7.0 paketleri, Canonical'in resmi Ubuntu depoları tarafından sağlanmayan üçüncü taraf bir PPA'ya aittir. Burada tavsiye ettiğim PPA'lar, PHP'yi Debian için paketleyen Ondřej Surý'dan (bu nedenle Ubuntu tarafından kullanılıyor) yani resmi bir depo olmasa da, tamamen rastgele değil! PPA'nın kendisi burada

PPA'yı kurulumunuza eklemek için:

sudo add-apt-repository ppa:ondrej/php  

Ardından, bu yeni PPA’dan ne teklif edildiği hakkında bilgi almak isteyip, daha sonra da aşağıdakileri çalıştırın:

sudo apt-get update   

Yeni PHP sürümlerini yükleyin

Şimdiden bazı php5 paketlerini yükledim, ancak hiçbir şeyi kaldırmadım, yeni sürümleri yüklemesini istediğimde apt'nin ne yapmak istediğini çözmesine izin verdim:

sudo apt-get install php5.6 php7.0

Bu, apt ve bolca ihtilaftan çok şikayetçi oldu. Önerilen ilk ilk çözüm, PHP 5.6'nın yüklenebilmesi için tüm php5 paketlerini kaldırmaktı, bu yüzden ilk öneriyi kabul ettim.

Apache kullanıyorum, bu yüzden bu kurulum bana hem php5.6 hem de php7.0 modülleri ile birlikte apache verdi ve php5.6 modülü gerçekte yüklendi.

Sadece PHP'nin yanı sıra, PHP'de beklediğiniz tüm uzantılar ve diğer araçlar da PHP'nin her iki sürümü için de vardır, bu yüzden ihtiyacınız olan modüllere eklemek çok kolaydır. Bunun ne kadar güzel yapılmasından çok etkilendim.

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

Şimdi sisteminizde kurulu iki tane tamamen ayrı PHP sürümü var, o yüzden tüm parçaların nereye gittiğine bakalım!

Konfigürasyon dosyaları hepsi içinde /etc/php/5.6ve /etc/php/7.0sırasıyla - burada, hangi uzantıların yüklendiğini yapılandırabilir, ini ayarlarını ve her sürüm için diğer her şeyi ayrı ayrı yapılandırabilirsiniz.

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

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

Nginx kullanıcılar için, değişiklikler Dijital Okyanus bu iyi belgelerine sahip, neredeyse kolaydır böylece onların rehber kontrol (onlar büyük dokümanlar var!): Https://www.digitalocean.com/community/tutorials/how-to- PHP'nin başka bir sürümünü kullanmak için nginx'i yeniden yapılandırma hakkında bir bölüm içerdiğinden , php-7-on-on-ubuntu-14-04'e yükseltme .

Komut satırında php5.6 ve php7.0 komutlarının her ikisine de sahibim. Ayrıca hala bir php komutum var - PHP etc * 'in belirli bir sürümüne bağlandığını görmek için / etc / alternative dosyasına bakın. Ayrıca hangisinin kullandığını kontrol ederek de hızlıca kontrol edebilirsiniz php -v.

* 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 - ama bu muhtemelen işaret edecek /usr/bin/php, hangisi benim için /etc/alternatives/phpkomuta bir işaret.

Uzantılarla çalışmak

Bu PPA, PHP'nin her iki sürümü için de pecl komutunu sunan normal php-pear paketi ile birlikte gelir, böylece PECL üzerinden kullanılabilen herhangi bir uzantı, olağan şekilde yüklenebilir. Ayrıca, php5.6-dev ya da php7.0-dev'in yüklü olması için ilgili başlıklara ihtiyacınız olacaktır.

Pecl kurulumu tamamlandığında, * .so dosyasını php.ini dosyasına eklemek için bir not alacaksınız; Aslında, burada yapılacak en iyi şey, ne olduğuna bakmaktır /etc/php/mods-available. Zaten burada, her biri uzantıdan sonra adlandırılmış ve .ini ile biten kendi dosyalarında olacak. Şablon olarak kullanmak için bir kopyasını kopyalayabilir veya kendinizinkini oluşturabilir ve uzantı için tüm ilgili konfigürasyonları (asgari olarak ihtiyacınız olan extension=[extensionName].so) koyabilirsiniz .

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

sudo phpenmod extension  
php -m  

Bu, bu modülü yüklemek için geçerli PHP sürümünüz için doğru yerlerde sembolik bağlantılar oluşturacaktır ve tarafından çıkarılan modüller listesinde görmelisiniz php -m. Profesyonel ipucu: Çıktıda göremiyorsanız, çıktının üstüne kaydırın ve orada yararlı herhangi bir hata mesajı olup olmadığını görün.


3

Bu gönderiden komutları sıraya koydum ve sunulduğu sırayla açıkladım (Ubuntu 12.04)

Bu yöntem size verir:

  1. Yüklü php sürümleri arasında geçişe izin veren menüyle komut dosyası (aynı anda değil)

  2. Sunucunuzda kurulu çeşitli PHP sürümleri

  3. ayrılmış conf dosyaları

İ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

PHP 5.3'ü ilk kez kurun. 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

PHP5.6'yı ilk kez 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

Script yöneticisi sürümleri PHP: Bir dosya oluşturun php.shve içine koyun /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

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

Derleme ve php 5.6 yükleyin

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

2

sorunlar:

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

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

Çözüm:

  • (b) 'diğer' PHP sürümünü kaynaktan manuel olarak derleyin (ya da tercih ederseniz uygun paketin kaynağını alın ve çakışmaları önlemek ve yükleme yollarını değiştirmek için değiştirin)

  • a) Farklı modül yolları ve ayrı başlangıç ​​betiği ile apache için ayrı bir yapılandırma seti oluşturun. Ve elbette ayrı bir limanda çalıştırın.


Bu çoklu paralel php örneğini derlemek için önceden paketlenmiş bir komut dosyası yok Sadece elle yapmak ve yolları yamalamak için mi? Bu nedenle, tüm barındırma şirketlerinin bu paralel sürümü çalıştırmak için özel komut dosyaları geliştirdikleri ve çabalarını hiçbir zaman paylaşmadıkları anlamına gelir.
lenzai

4
Tek bir apache örneği aynı anda 2 php sürümünü çalıştırabilir.
Nanne

1

Birden fazla yapmak yerine dosyama VirtualHostaşağıdaki kodu ekliyorum .htaccessve şaşırtıcı bir şekilde çalıştı,

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

Düğüm: php7.2-fpmKodu kullanmadan önce zaten kurmuştum .


0

Onları aynı anda çalıştırmak istiyorsanız, iki farklı porta ihtiyacınız var. Belki de apache config'ini (httpd.conf) apache'ye başlamadan önce bir ya da başka bir sürümü doğru konuma getiren basit bir betik ile değiştirebilirsiniz.


1
Zaten PHP 5.3.5 yüklü. PHP 5.2.17'yi nasıl kurabilirim? Lütfen bu iki versiyon arasında geçiş yapmak için nerede ve neyi değiştirmem gerektiğini söyler misiniz? Yüklememde httpd.conf dosyası boştur.
Debiprasad

0

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

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

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

Şimdi php-fpm kullanmanın daha iyi olduğunu düşünüyorum ... ama çoklu php sürümlerini yapılandırmak için daha karmaşık bir litle.

Katları php-fpms çalıştırmanız ve birbirlerini kullanmak için apache ayarlamanız gerekir.


3
Ubuntu'ya Sormaya Hoş Geldiniz! Bu soruyu teorik olarak cevaplayabilse de , cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak tercih edilir.
user98085

Söylediğin gibi yapacak vaktim yoktu. Sanırım, sadece bir yol göstermek istedim. Stil'in biçimlendirme malzemelerini nasıl kullanacağını öğrenmesi gerekiyor. Yine de teşekkürler!
Henrique Fernandes,

0

Kutumda yüklü php sürümleri arasında kolayca geçiş yapmama izin veren bir bash betiği yazdım. Birkaç sanal ana bilgisayar çalıştırıyorum çünkü eski ve yeni programlara sahip müşterileri olan birkaç web projem var. Bu projelerden bazıları eski sürüm php, diğer projeler ise php7.0 gerektirir.

Yorumlarımı oku ve bunu kullanmadan önce neler olduğunu anladığından emin ol.

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

0

Birden fazla projeyle çalışırken de aynı sorunu yaşadım. Bu makaleye atıfta bulundum. Ancak gerektiğinde sürümleri değiştirmem gerektiğinde, ancak bu, cli ve web için ayrı ayrı esneklik sağlıyor.

Php5.6'dan php7.0'a geçiş

Apache için komutu şu şekilde kullanabiliriz:

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

CLI için komutu şu şekilde kullanabiliriz:

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

Php7.0'dan php5.6'ya geçiş

Apache için komutu şu şekilde kullanabiliriz:

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

CLI için komutu şu şekilde kullanabiliriz:

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

Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir. - Şu kaynaktan
waltinator

@waltinator İnceleme için teşekkürler, bununla kesinlikle ilgileneceğim
Shivdhwaj Pandey

0

PHP'nin yeni sürümünü devre dışı bırakarak ve etkinleştirerek yapılabilir.

  • eski sürüme geçin -
    a2dismod php7.0
    service apache2 restart
  • yeni sürüme
    geçin a2enmod php7.0
    service apache2 restart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.