@hakre Zgoda, użycie FPM zmniejszyłoby prawdopodobieństwo, że wiele wersji wpłynie na siebie nawzajem po załadowaniu jako moduł Apache :)
Ja͢ck
@Jack: Argh, not Apache Module, FCGI;)
hakre
Do tej pory próbowałem phpbrew i php-version, ale wydaje się, że oba nie potrafią skompilować PHP.
niezły tyłek
Odpowiedzi:
17
Jednym ze sposobów jest skonfigurowanie głównej wersji php za pomocą mod_php i uruchomienie wszystkich innych przez szybkie cgi na różnych portach (tj. 81, 82, 83 itd.). Nie gwarantuje to jednak całkowicie spójnego zachowania.
Pomysł: dla PHP 5.2.1 użyj portu 10521. Dla 5.0.0 użyj 10500 :)
Wayne
2
Inną opcją byłoby uruchomienie go przy użyciu CGI (lub FastCGI) pod różnymi ścieżkami - np. / Cgi500 /, / cgi528 /, ...
Gray Panther
Jeśli korzystasz z Debiana i chcesz używać pakietów, polecam użycie debootstrap do stworzenia systemu chroot, który przechowuje twoją wersję PHP, a następnie skonfiguruj Apache w systemie chroot.
Max Tsepkov
23
Z CentOS możesz to zrobić używając kombinacji fastcgi dla jednej wersji PHP i php-fpm dla drugiej, jak opisano tutaj:
Dla php 5.2 i 5.3 możemy znaleźć wiele pakietów rpm w Internecie. Jednak wszystkie one kolidują z php, który jest dostarczany z CentOS, więc lepiej skompilujmy je i zainstalujemy z serwera, nie jest to trudne, chodzi o to, aby zainstalować php w innej lokalizacji.
Jednak podczas instalowania php jako modułu apache możemy używać tylko jednej wersji php w tym samym czasie. Jeśli potrzebujemy uruchomić różne wersje php na tym samym serwerze, w tym samym czasie, na przykład, inny wirtualny host może potrzebować innej wersji php. Na szczęście fajne FastCGI i PHP-FPM mogą pomóc.
Skompiluj i zainstaluj php-5.2 z włączonym fastcgi
Edytuj /etc/php53/php-fpm.conf, zmień niektóre ustawienia. Ten krok służy głównie do odkomentowania niektórych ustawień, możesz dostosować wartość, jeśli chcesz.
Jest to jednak odpowiedź tylko na link. Prosimy o podanie odpowiednich informacji w odpowiedzi, zamiast polegać w całości na innej witrynie. Linki mają irytujący problem polegający na tym, że mogą zniknąć, przez co SO nadal nie zawiera odpowiednich informacji.
Maarten Bodewes
Możesz zajrzeć do CloudLinux. Jest to płatne rozwiązanie, ale ma akceptowalną cenę.
transilvlad
1
Poprawna odpowiedź! Oto to samo rozwiązanie dla Ubuntu: howtoforge.com/…
Tobias Gaertner
10
Posiadanie wielu instancji apache + php nigdy nie spodobało mi się, ale to prawdopodobnie najłatwiejszy sposób na zrobienie tego. Jeśli nie czujesz się jak KISS ... oto pomysł.
Uruchom swój apache i spróbuj go skonfigurować tak, jak debian i ubuntu, zrób to, np. Mają katalogi dla załadowanych modułów. Twój conf apache może używać takich linii:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Następnie skompiluj swoją pierwszą wersję php i nadaj jej prefiks, który ma wyraźnie zawarty numer wersji, np. /Usr/local/php/5.2.8, /usr/local/php/5.2.6 ...
Konfiguracja / ładowanie wyglądałaby mniej więcej tak:
Aby zmienić wersje, wszystko co musisz zrobić, to zmienić pliki load i conf z katalogu, w którym apache włącza pliki dla innej wersji. Możesz to zautomatyzować za pomocą prostego skryptu bash (usuń rzeczywisty plik, skopiuj plik wersji alternatywnych w miejscu i zrestartuj apache.
Jedną z zalet tej konfiguracji jest to, że wszystko jest zgodne, tak długo, jak długo zachowujesz ten sam plik php.ini pod względem opcji i modułów (co i tak musiałbyś zrobić z CGI). Wszyscy przechodzą przez SAPI. Twoje aplikacje nie będą wymagać żadnych zmian ani używać względnych adresów URL.
Myślę, że to powinno zadziałać, ale z drugiej strony, nie próbowałem tego ani prawdopodobnie nie zrobię tego, ponieważ nie mam takich samych wymagań jak Ty. Jeśli jednak kiedykolwiek spróbujesz, skomentuj.
Uwaga: Poniższa metoda będzie działać w systemie Windows.
Alternatywną metodą (jeśli można jednocześnie uruchamiać pojedynczą wersję PHP) jest zdefiniowanie wielu usług Apache, z których każda będzie używać innej wersji PHP.
Przede wszystkim warunki użytkowania w pliku konfiguracyjnym Apache:
Teraz możesz uruchomić jedną z powyższych usług na raz (należy zamknąć jedną przed uruchomieniem drugiej).
Jeśli wcześniej zainstalowałeś Apache jako usługę, możesz to usunąć za pomocą poniższego polecenia (zastąp nazwę usługi tą, której użyłeś):
apache -k uninstall -n Apache224
Kolejną uwagą jest to, że osobiście używam „programu z ikonami obszaru powiadomień” o nazwie „Seobiseu” do uruchamiania i zatrzymywania usług w razie potrzeby. Dodałem do niego dwie powyższe usługi.
To naprawdę bardzo sprytne rozwiązanie. Jeśli chcesz uruchamiać wiele usług równolegle, możesz uwzględnić odpowiednio Listen 80i Listen 81w każdej z nich ifdefine.
caiosm1005
Niezły pomysł, ale pytanie dotyczy serwera LAMP, a nie serwera WAMP.
Vinicius Monteiro
4
Rozumiejąc, że prawdopodobnie mówisz o komputerze lokalnym / stacjonarnym i prawdopodobnie chciałbyś nadal mówić o komputerze lokalnym / stacjonarnym, przedstawię Ci alternatywę, na wypadek gdyby mogła pomóc tobie lub komuś innemu:
Skonfiguruj wiele instancji serwera wirtualnego w chmurze i udostępnij swój kod między nimi jako repozytorium git (lub jak sądzę mercurial, chociaż nie mam osobistego doświadczenia, wszystko, czego naprawdę potrzebujesz, to coś zdecentralizowanego). Ma to tę zaletę, że daje Ci jak najbliższe doświadczenie produkcyjne, a jeśli masz doświadczenie w konfigurowaniu serwerów, nie jest to takie skomplikowane (lub drogie, jeśli chcesz tylko uruchomić serwer, zrób to, co musisz zrobić, następnie ponownie zakręć, a potem mówisz o kilku centach do powiedzmy 50 centów, do kilku dolców, jeśli po prostu zostawisz ją uruchomioną).
Obecnie opracowuję wszystkie projekty w chmurze i wydaje mi się, że zarządzanie infrastrukturą jest o wiele prostsze niż kiedykolwiek podczas korzystania z instalacji lokalnych / niezwirtualizowanych, co sprawia, że tego rodzaju scenariusz równoległy jest dość bezpośredni. Chciałem tylko wyrzucić ten pomysł, gdybyś go nie rozważył.
Właśnie pomyślnie obniżyłem wersję PHP5.3 na Ubuntu 10.
Aby to zrobić, użyłem następującego skryptu:
#! /bin/sh
php_packages=`dpkg -l | grep php | awk '{print $2}'`
sudo apt-get remove $php_packages
sed s/lucid/karmic/g /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/karmic.list
sudo mkdir -p /etc/apt/preferences.d/
for package in $php_packages;
doecho"Package: $package
Pin: release a=karmic
Pin-Priority: 991
" | sudo tee -a /etc/apt/preferences.d/php
done
sudo apt-get update
sudo apt-get install $php_packages
Dla każdego, kto nie wie, jak uruchamiać skrypty z wiersza poleceń, oto krótki samouczek:
1. cd ~/
2. mkdir bin
3. sudo nano ~/bin/myscriptname.sh
4. paste in the script code I have posted above this
5. ctrl+x (this exits and prompts for you to save)
6. chmod u+x myscriptname.sh
Tych 6 kroków tworzy skrypt w folderze o nazwie „bin” w Twoim katalogu domowym. Następnie możesz uruchomić ten skrypt, wywołując następujące polecenie:
dobry skrypt, chociaż karmic nie działał na mnie, ponieważ byłem na Power PC. Właśnie użyłem skryptu, aby usunąć moją bieżącą instalację, a następnie ręcznie zbudowałem 2.14
Jason
2
Rasmus Lerdorf, który stworzył PHP, utrzymuje aktywne rozwiązanie Vagrant, które wydaje się spełniać Twoje potrzeby. Pozwala na szybkie przełączanie się między wersjami PHP, obsługując obecnie ponad 20 różnych wersji. Wychodzi z pudełka z serwerem nginx, ale można go łatwo przełączyć na apache2 z wstępnie skonfigurowanym ustawieniem. Obsługuje również MySQL po wyjęciu z pudełka.
W ten sposób będziesz mieć dostęp do wszystkich wersji PHP, które można wdrożyć na dwóch głównych serwerach internetowych, w ładnym pudełku z włóczęgą, utrzymywanym przez wielkiego człowieka stojącego za PHP.
To prawdopodobnie IMHO, „najlepsza” odpowiedź - inna maszyna wirtualna dla każdej wersji (ale czy można uruchomić wiele wersji na jednym adresie IP?). Ale jak ironiczne, że twórca php powinien to zrobić - największą wadą php musi być brak kompatybilności między wersjami, co sprawia, że na przykład Joomla jest niemal bezużyteczna.
EML
0
Mam kilka projektów uruchomionych na moim pudełku. Jeśli zainstalowałeś już więcej niż jedną wersję, ten skrypt bash powinien pomóc ci łatwo się przełączyć. W tej chwili mam php5, php5.6 i php7.0, które często przełączam się tam iz powrotem w zależności od projektu, nad którym pracuję. Oto mój kod.
Zapraszam do kopiowania. Upewnij się, że rozumiesz, jak działa kod. To jest dla webhostin. moje lokalne pudełko moje mody są przechowywane w / etc / apache2 / mods-enabled /
#!/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 variableVAR=$(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 exitif [ "$NEWVERSION" = "" ]; then
echo current version is ${array[0]}. To change version please useargumentexit 1
fiOLDVERSION=${array[0]}
#confirmtotheuserthisiswhattheywanttodoecho "Updatephp" ${OLDVERSION} to ${NEWVERSION}
#givetheusertheopportunitytouseCTRL-Ctoexitotjusthitreturnreadx
#calla2dismodfunction: thisdeactivatethecurrentphpversionsudoa2dismodphp${OLDVERSION}
#callthea2enmodversion. Thisenablesthenewmodesudoa2enmodphp${NEWVERSION}
echo "Restartservice??"
readx
#restartapachesudoserviceapache2restart
Do testów po prostu uruchamiam wiele instancji httpd na różnych adresach IP, więc mam php7 działające na 192.168.0.70 i php5.6 działające na 192.168.0.56. W produkcji mam witrynę ze starym systemem oscommerce z php5.3 i po prostu mam inny plik konfiguracyjny dla tej witryny
To także czysty sposób na posiadanie różnych php.iniplików dla różnych witryn. Jeśli masz tylko kilka witryn, to dobry sposób na utrzymanie porządku i nie musisz martwić się o więcej niż jedną witrynę naraz, gdy coś aktualizujesz
Odpowiedzi:
Jednym ze sposobów jest skonfigurowanie głównej wersji php za pomocą mod_php i uruchomienie wszystkich innych przez szybkie cgi na różnych portach (tj. 81, 82, 83 itd.). Nie gwarantuje to jednak całkowicie spójnego zachowania.
źródło
Z CentOS możesz to zrobić używając kombinacji fastcgi dla jednej wersji PHP i php-fpm dla drugiej, jak opisano tutaj:
https://web.archive.org/web/20130707085630/http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server
Oparty na CentOS 5.6, tylko dla Apache
1. Włącz repozytorium rpmforge i epel yum
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm sudo rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm sudo rpm -ivh epel-release-5-4.noarch.rpm
2. Zainstaluj php-5.1
Seria CentOS / RHEL 5.x ma php-5.1 w pudełku, po prostu zainstaluj go z yum, np:
3. Skompiluj i zainstaluj php 5.2 i 5.3 ze źródła
Dla php 5.2 i 5.3 możemy znaleźć wiele pakietów rpm w Internecie. Jednak wszystkie one kolidują z php, który jest dostarczany z CentOS, więc lepiej skompilujmy je i zainstalujemy z serwera, nie jest to trudne, chodzi o to, aby zainstalować php w innej lokalizacji.
Jednak podczas instalowania php jako modułu apache możemy używać tylko jednej wersji php w tym samym czasie. Jeśli potrzebujemy uruchomić różne wersje php na tym samym serwerze, w tym samym czasie, na przykład, inny wirtualny host może potrzebować innej wersji php. Na szczęście fajne FastCGI i PHP-FPM mogą pomóc.
Skompiluj i zainstaluj php-5.2 z włączonym fastcgi
1) Zainstaluj wymagane pakiety deweloperskie
2) Skompiluj i zainstaluj
wget http://cn.php.net/get/php-5.2.17.tar.bz2/from/this/mirror tar -xjf php-5.2.17.tar.bz2 cd php-5.2.17 ./configure --prefix=/usr/local/php52 \ --with-config-file-path=/etc/php52 \ --with-config-file-scan-dir=/etc/php52/php.d \ --with-libdir=lib64 \ --with-mysql \ --with-mysqli \ --enable-fastcgi \ --enable-force-cgi-redirect \ --enable-mbstring \ --disable-debug \ --disable-rpath \ --with-bz2 \ --with-curl \ --with-gettext \ --with-iconv \ --with-openssl \ --with-gd \ --with-mcrypt \ --with-pcre-regex \ --with-zlib make -j4 > /dev/null sudo make install sudo mkdir /etc/php52 sudo cp php.ini-recommended /etc/php52/php.ini
3) utwórz skrypt pakujący fastcgi
utwórz plik /usr/local/php52/bin/fcgiwrapper.sh
#!/bin/bash PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS exec /usr/local/php52/bin/php-cgi chmod a+x /usr/local/php52/bin/fcgiwrapper.sh Build and install php-5.3 with fpm enabled wget http://cn.php.net/get/php-5.3.6.tar.bz2/from/this/mirror tar -xjf php-5.3.6.tar.bz2 cd php-5.3.6 ./configure --prefix=/usr/local/php53 \ --with-config-file-path=/etc/php53 \ --with-config-file-scan-dir=/etc/php53/php.d \ --enable-fpm \ --with-fpm-user=apache \ --with-fpm-group=apache \ --with-libdir=lib64 \ --with-mysql \ --with-mysqli \ --enable-mbstring \ --disable-debug \ --disable-rpath \ --with-bz2 \ --with-curl \ --with-gettext \ --with-iconv \ --with-openssl \ --with-gd \ --with-mcrypt \ --with-pcre-regex \ --with-zlib make -j4 && sudo make install sudo mkdir /etc/php53 sudo cp php.ini-production /etc/php53/php.ini sed -i -e 's#php_fpm_CONF=\${prefix}/etc/php-fpm.conf#php_fpm_CONF=/etc/php53/php-fpm.conf#' \ sapi/fpm/init.d.php-fpm sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm sudo chmod a+x /etc/init.d/php-fpm sudo /sbin/chkconfig --add php-fpm sudo /sbin/chkconfig php-fpm on sudo cp sapi/fpm/php-fpm.conf /etc/php53/
Skonfiguruj php-fpm
Edytuj /etc/php53/php-fpm.conf, zmień niektóre ustawienia. Ten krok służy głównie do odkomentowania niektórych ustawień, możesz dostosować wartość, jeśli chcesz.
pid = run/php-fpm.pid listen = 127.0.0.1:9000 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20
Następnie zacznij fpm
Zainstaluj i skonfiguruj mod_fastcgi, mod_fcgid
sudo yum install libtool httpd-devel apr-devel wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz tar -xzf mod_fastcgi-current.tar.gz cd mod_fastcgi-2.4.6 cp Makefile.AP2 Makefile sudo make top_dir=/usr/lib64/httpd/ install sudo sh -c "echo 'LoadModule fastcgi_module modules/mod_fastcgi.so' > /etc/httpd/conf.d/mod_fastcgi.conf" yum install mod_fcgid
Skonfiguruj i przetestuj wirtualne hosty
1) Dodaj następujący wiersz do / etc / hosts
127.0.0.1 web1.example.com web2.example.com web3.example.com
2) Utwórz katalog główny dokumentu sieciowego i upuść pod nim plik index.php, aby pokazać phpinfo przełączenie na użytkownika root, uruchom
mkdir /var/www/fcgi-bin for i in {1..3}; do web_root=/var/www/web$i mkdir $web_root echo "<?php phpinfo(); ?>" > $web_root/index.php done
Uwaga: pusty katalog / var / www / fcgi-bin jest wymagany, NIE USUWAJ GO PÓŹNIEJ
3) Utwórz plik konfiguracyjny Apache (dołącz do httpd.conf)
NameVirtualHost *:80 # module settings # mod_fcgid <IfModule mod_fcgid.c> idletimeout 3600 processlifetime 7200 maxprocesscount 17 maxrequestsperprocess 16 ipcconnecttimeout 60 ipccommtimeout 90 </IfModule> # mod_fastcgi with php-fpm <IfModule mod_fastcgi.c> FastCgiExternalServer /var/www/fcgi-bin/php-fpm -host 127.0.0.1:9000 </IfModule> # virtual hosts... ################################################################# #1st virtual host, use mod_php, run php-5.1 ################################################################# <VirtualHost *:80> ServerName web1.example.com DocumentRoot "/var/www/web1" <ifmodule mod_php5.c> <FilesMatch \.php$> AddHandler php5-script .php </FilesMatch> </IfModule> <Directory "/var/www/web1"> DirectoryIndex index.php index.html index.htm Options -Indexes FollowSymLinks Order allow,deny Allow from all </Directory> </VirtualHost> ################################################################# #2nd virtual host, use mod_fcgid, run php-5.2 ################################################################# <VirtualHost *:80> ServerName web2.example.com DocumentRoot "/var/www/web2" <IfModule mod_fcgid.c> AddHandler fcgid-script .php FCGIWrapper /usr/local/php52/bin/fcgiwrapper.sh </IfModule> <Directory "/var/www/web2"> DirectoryIndex index.php index.html index.htm Options -Indexes FollowSymLinks +ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost> ################################################################# #3rd virtual host, use mod_fastcgi + php-fpm, run php-5.3 ################################################################# <VirtualHost *:80> ServerName web3.example.com DocumentRoot "/var/www/web3" <IfModule mod_fastcgi.c> ScriptAlias /fcgi-bin/ /var/www/fcgi-bin/ AddHandler php5-fastcgi .php Action php5-fastcgi /fcgi-bin/php-fpm </IfModule> <Directory "/var/www/web3"> DirectoryIndex index.php index.html index.htm Options -Indexes FollowSymLinks +ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost>
4) zrestartuj Apache. odwiedź 3 strony, aby wyświetlić phpinfo i zweryfikować wynik. to znaczy:
http://web1.example.com http://web2.example.com http://web3.example.com
Jeśli wszystko jest w porządku, możesz użyć jednego z 3 hostów wirtualnych jako szablonu do utworzenia nowego hosta wirtualnego z żądaną wersją php.
źródło
Posiadanie wielu instancji apache + php nigdy nie spodobało mi się, ale to prawdopodobnie najłatwiejszy sposób na zrobienie tego. Jeśli nie czujesz się jak KISS ... oto pomysł.
Uruchom swój apache i spróbuj go skonfigurować tak, jak debian i ubuntu, zrób to, np. Mają katalogi dla załadowanych modułów. Twój conf apache może używać takich linii:
Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf
Następnie skompiluj swoją pierwszą wersję php i nadaj jej prefiks, który ma wyraźnie zawarty numer wersji, np. /Usr/local/php/5.2.8, /usr/local/php/5.2.6 ...
Konfiguracja / ładowanie wyglądałaby mniej więcej tak:
php5.2.6.load
LoadModule php5_module /usr/local/php/5.2.6/libphp5.so
php5.2.8.load
LoadModule php5_module /usr/local/php/5.2.8/libphp5.so
Aby zmienić wersje, wszystko co musisz zrobić, to zmienić pliki load i conf z katalogu, w którym apache włącza pliki dla innej wersji. Możesz to zautomatyzować za pomocą prostego skryptu bash (usuń rzeczywisty plik, skopiuj plik wersji alternatywnych w miejscu i zrestartuj apache.
Jedną z zalet tej konfiguracji jest to, że wszystko jest zgodne, tak długo, jak długo zachowujesz ten sam plik php.ini pod względem opcji i modułów (co i tak musiałbyś zrobić z CGI). Wszyscy przechodzą przez SAPI. Twoje aplikacje nie będą wymagać żadnych zmian ani używać względnych adresów URL.
Myślę, że to powinno zadziałać, ale z drugiej strony, nie próbowałem tego ani prawdopodobnie nie zrobię tego, ponieważ nie mam takich samych wymagań jak Ty. Jeśli jednak kiedykolwiek spróbujesz, skomentuj.
źródło
Uwaga: Poniższa metoda będzie działać w systemie Windows.
Alternatywną metodą (jeśli można jednocześnie uruchamiać pojedynczą wersję PHP) jest zdefiniowanie wielu usług Apache, z których każda będzie używać innej wersji PHP.
Przede wszystkim warunki użytkowania w pliku konfiguracyjnym Apache:
<ifdefine php54> SetEnv PHPRC C:/apache/php54/ ScriptAlias /php/ "C:/apache/php54/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php-cgi.exe" </ifdefine> <ifdefine php55> SetEnv PHPRC C:/apache/php55/ ScriptAlias /php/ "C:/apache/php55/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php-cgi.exe" </ifdefine>
Teraz za pomocą httpd.exe utwórz dwie oddzielne usługi z wiersza poleceń (z uprawnieniami administratora):
Teraz możesz uruchomić jedną z powyższych usług na raz (należy zamknąć jedną przed uruchomieniem drugiej).
Jeśli wcześniej zainstalowałeś Apache jako usługę, możesz to usunąć za pomocą poniższego polecenia (zastąp nazwę usługi tą, której użyłeś):
Kolejną uwagą jest to, że osobiście używam „programu z ikonami obszaru powiadomień” o nazwie „Seobiseu” do uruchamiania i zatrzymywania usług w razie potrzeby. Dodałem do niego dwie powyższe usługi.
źródło
Listen 80
iListen 81
w każdej z nichifdefine
.Rozumiejąc, że prawdopodobnie mówisz o komputerze lokalnym / stacjonarnym i prawdopodobnie chciałbyś nadal mówić o komputerze lokalnym / stacjonarnym, przedstawię Ci alternatywę, na wypadek gdyby mogła pomóc tobie lub komuś innemu:
Skonfiguruj wiele instancji serwera wirtualnego w chmurze i udostępnij swój kod między nimi jako repozytorium git (lub jak sądzę mercurial, chociaż nie mam osobistego doświadczenia, wszystko, czego naprawdę potrzebujesz, to coś zdecentralizowanego). Ma to tę zaletę, że daje Ci jak najbliższe doświadczenie produkcyjne, a jeśli masz doświadczenie w konfigurowaniu serwerów, nie jest to takie skomplikowane (lub drogie, jeśli chcesz tylko uruchomić serwer, zrób to, co musisz zrobić, następnie ponownie zakręć, a potem mówisz o kilku centach do powiedzmy 50 centów, do kilku dolców, jeśli po prostu zostawisz ją uruchomioną).
Obecnie opracowuję wszystkie projekty w chmurze i wydaje mi się, że zarządzanie infrastrukturą jest o wiele prostsze niż kiedykolwiek podczas korzystania z instalacji lokalnych / niezwirtualizowanych, co sprawia, że tego rodzaju scenariusz równoległy jest dość bezpośredni. Chciałem tylko wyrzucić ten pomysł, gdybyś go nie rozważył.
źródło
Właśnie pomyślnie obniżyłem wersję PHP5.3 na Ubuntu 10.
Aby to zrobić, użyłem następującego skryptu:
#! /bin/sh php_packages=`dpkg -l | grep php | awk '{print $2}'` sudo apt-get remove $php_packages sed s/lucid/karmic/g /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/karmic.list sudo mkdir -p /etc/apt/preferences.d/ for package in $php_packages; do echo "Package: $package Pin: release a=karmic Pin-Priority: 991 " | sudo tee -a /etc/apt/preferences.d/php done sudo apt-get update sudo apt-get install $php_packages
Dla każdego, kto nie wie, jak uruchamiać skrypty z wiersza poleceń, oto krótki samouczek:
1. cd ~/ 2. mkdir bin 3. sudo nano ~/bin/myscriptname.sh 4. paste in the script code I have posted above this 5. ctrl+x (this exits and prompts for you to save) 6. chmod u+x myscriptname.sh
Tych 6 kroków tworzy skrypt w folderze o nazwie „bin” w Twoim katalogu domowym. Następnie możesz uruchomić ten skrypt, wywołując następujące polecenie:
Oulia!
Mam nadzieję, że to pomoże niektórym z was!
Dla porównania, tutaj mam skrypt: PHP5.2.10 dla Ubuntu 10
Jest tam kilka osób, które potwierdzają, że to działa i było dla mnie przyjemnością.
źródło
Rasmus Lerdorf, który stworzył PHP, utrzymuje aktywne rozwiązanie Vagrant, które wydaje się spełniać Twoje potrzeby. Pozwala na szybkie przełączanie się między wersjami PHP, obsługując obecnie ponad 20 różnych wersji. Wychodzi z pudełka z serwerem nginx, ale można go łatwo przełączyć na apache2 z wstępnie skonfigurowanym ustawieniem. Obsługuje również MySQL po wyjęciu z pudełka.
W ten sposób będziesz mieć dostęp do wszystkich wersji PHP, które można wdrożyć na dwóch głównych serwerach internetowych, w ładnym pudełku z włóczęgą, utrzymywanym przez wielkiego człowieka stojącego za PHP.
Aby uzyskać więcej informacji, chciałbym odnieść się do przemówienia wygłoszonego przez p. Lerdorf pod adresem https://youtu.be/6XnysJAyThs?t=2864
Repozytorium github zawierające rozwiązanie Vagrant znajduje się pod adresem https://github.com/rlerdorf/php7dev
źródło
Mam kilka projektów uruchomionych na moim pudełku. Jeśli zainstalowałeś już więcej niż jedną wersję, ten skrypt bash powinien pomóc ci łatwo się przełączyć. W tej chwili mam php5, php5.6 i php7.0, które często przełączam się tam iz powrotem w zależności od projektu, nad którym pracuję. Oto mój kod.
Zapraszam do kopiowania. Upewnij się, że rozumiesz, jak działa kod. To jest dla webhostin. moje lokalne pudełko moje mody są przechowywane w / etc / apache2 / mods-enabled /
#!/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
źródło
Do testów po prostu uruchamiam wiele instancji httpd na różnych adresach IP, więc mam php7 działające na 192.168.0.70 i php5.6 działające na 192.168.0.56. W produkcji mam witrynę ze starym systemem oscommerce z php5.3 i po prostu mam inny plik konfiguracyjny dla tej witryny
To także czysty sposób na posiadanie różnych
php.ini
plików dla różnych witryn. Jeśli masz tylko kilka witryn, to dobry sposób na utrzymanie porządku i nie musisz martwić się o więcej niż jedną witrynę naraz, gdy coś aktualizujeszźródło