w Ubuntu jest apache.conf w / etc / apache2, też o tym myślałem, może w przyszłości zrobię jakiś pakiet, który byłby bardzo przydatny dla programistów stron
Możesz to zrobić za pomocą suPHP, nie będąc pewnym szczegółów
Marco Ceppi
1
czy istnieje coś takiego jak Python virtualenv, aby mieć czyste izolowane wdrożenia PHP?
lenzai
Czy zastanawiałeś się nad utworzeniem wirtualnych serwerów Ubuntu przy użyciu oprogramowania do wirtualizacji, którego używasz w sposób bezgłowy? Byłbym zaskoczony, gdyby to, co chcesz zrobić, nie jest dobrze obsłużone (nie jest to gra słów zamierzona) w takiej konfiguracji.
Simon Hoare
1
Zdefiniuj, co to znaczy „łatwo przełączać”. Użyłem tego do pracy: mój serwer używał innego PHP dla plików .phpi .php5. Możesz również skonfigurować swój serwer WWW, aby używał różnych wersji PHP dla różnych portów (jak http://localhost:80i http://localhost:8080) lub różnych domen (jak http://localphp52i http://localphp53), pozostawiając całą pozostałą strukturę folderów nietkniętą, dzięki czemu można łatwo porównać uruchomienie jednej aplikacji internetowej w dwóch środowiskach poprzez zmianę bieżącego URL.
cprn
Odpowiedzi:
61
Aby to osiągnąć, możesz użyć menedżera wersji php. Dostępne są różne menedżery wersji, takie jak:
Dzięki, czy możesz dołączyć instrukcje? (onnu vishadheekarikkamo?)
Tachyons
17
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Nanne
2
Wystarczy sprawdzić linki, które mają naprawdę dobrą dokumentację na swoich stronach. Czy naprawdę chcesz, żebym skopiował i wkleił rzeczy z ich strony internetowej ?.
aneeshep
7
Jak na ironię, jednym z powodów nie tylko publikowania linków jest linkrot, na który cierpi ten post.
MirroredFate
@aneeshep, nie kopiuj-wklej ich dokumentacji, ale odpowiednie fragmenty i kilka wierszy o tym, co to jest „menedżer wersji php” i jak używać / konfigurować go dla tego konkretnego problemu, byłoby naprawdę mile widziane.
Matthieu,
20
Państwo może uruchomić 2 różne wersje PHP na raz, ale to nie jest tak proste, jak to tylko apt-zachęcając. Musisz uruchomić jedną osobno zainstalowaną wersję i obsłużyć ją zgodnie z ustawieniami w konfiguracji Apache.
Możesz to zrobić na przykład za pomocą fastcgi: w zasadzie to, czego szukasz, to konfiguracja widoczna na tej stronie . Dodajesz inny moduł obsługi w konfiguracji w zależności od potrzebnej sytuacji / portu / domeny. Sztuczka po zainstalowaniu obu wersji jest następująca:
=== z tej strony ==
Ostatnim krokiem było stworzenie wirtualnych hostów. Na koniec mam trzy pliki w / etc / apache2 / sites-enabled: 000-default, php5.3.17 i php5.4.7 Z następującą zawartością
domyślna:
<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>
Zobacz pełną wersję połączonego pytania . Nie zapomnij także spojrzeć na dwa linki w nagłówku, wyglądają jak fajne samouczki (ale mniej skompresowane). To i tamto
(nie zniechęcaj się faktem, że połączone pytanie jest duże bez żadnej akceptowanej odpowiedzi. Metoda powinna (i działa) dobrze, ale użytkownik zapomniał użyć <?phpi używał <?wyłączonych skrótów, zobacz komentarze)
Zainstalowałem php 5.6 i 7.0, ale oprócz wszystkich wskazówek nadal działało 5.6, więc to polecenie oszczędza dzień (w moim przypadku wybieram opcję 1 i ponownie uruchamiam apache):
Taki sam jak skrypt z „Growling Flea”, ale przy użyciu nowych wersji.
Dodaj PPA
Pakiety PHP 5.6 i PHP 7.0 pochodzą z zewnętrznego PPA, nie dostarczanego przez oficjalne repozytoria Ubuntu od Canonical. PPA, które tutaj polecam, pochodzą od Ondřej Surý, który pakuje PHP dla Debiana (z którego następnie korzysta Ubuntu), więc chociaż nie jest to oficjalne repozytorium, nie jest on losowy! Sam PPA jest
tutaj
Aby dodać PPA do konfiguracji:
sudo add-apt-repository ppa:ondrej/php
Następnie będziemy chcieli również pobrać informacje o ofercie tego nowego PPA, więc uruchom:
sudo apt-get update
Zainstaluj nowe wersje PHP
Miałem już zainstalowane niektóre pakiety php5, ale niczego nie odinstalowałem, po prostu pozwoliłem aptowi ustalić, co chce zrobić, kiedy poprosiłem go o zainstalowanie nowych wersji:
sudo apt-get install php5.6 php7.0
Doprowadziło to do wielu skarg ze strony apt i wielu konfliktów. Pierwszym sugerowanym rozwiązaniem było usunięcie wszystkich standardowych pakietów php5, aby można było zainstalować PHP 5.6 - więc właśnie zaakceptowałem pierwszą sugestię.
Używam apache, więc ta konfiguracja dała mi apache z dostępnymi modułami php5.6 i php7.0, a moduł php5.6 faktycznie załadowany.
Oprócz samego PHP wszystkie rozszerzenia i inne narzędzia, których można oczekiwać od PHP, są dostępne dla obu wersji PHP, więc bardzo łatwo jest dodać potrzebne moduły. Byłem pod wielkim wrażeniem tego, jak ładnie się to robi.
Konfigurowanie i przełączanie wersji
Teraz masz w systemie dwie całkowicie oddzielne wersje PHP, więc spójrzmy, dokąd poszły wszystkie elementy!
Pliki konfiguracyjne znajdują się
odpowiednio /etc/php/5.6i /etc/php/7.0wewnątrz - tutaj możesz skonfigurować, które rozszerzenia są ładowane, ustawić ustawienia ini i wszystko inne dla każdej wersji oddzielnie.
Jestem użytkownikiem Apache i jak wspomniałem oba moduły są dostępne. Aby przejść z jednego do drugiego, muszę zrobić:
sudo a2dismod php5.6
sudo a2enmod php7.0
sudo service apache2 restart
Z wiersza poleceń mam zarówno php5.6, jak i php7.0 dostępne jako polecenia. Nadal mam też komendę php - zajrzyj do / etc / alternatives, aby zobaczyć, czy dowiązuje ona do konkretnej wersji PHP *. Możesz także szybko sprawdzić, którego używasz, uruchamiając php -v.
* dokładniej, uruchom który php, aby zobaczyć, która wersja PHP jest używana - ale to prawdopodobnie wskaże /usr/bin/php, która dla mnie sama jest dowiązaniem symbolicznym do /etc/alternatives/phppolecenia.
Praca z rozszerzeniami
Ten PPA jest dostarczany ze zwykłym pakietem php-pear, który oferuje polecenie pecl dla obu wersji PHP, więc wszelkie rozszerzenia dostępne przez PECL można zainstalować w zwykły sposób. Potrzebne będą również odpowiednie nagłówki, więc należy zainstalować php5.6-dev lub php7.0-dev.
Po zakończeniu instalacji pecl otrzymasz notatkę, aby dodać plik * .so do pliku php.ini; w rzeczywistości najlepszą rzeczą do zrobienia jest sprawdzenie, co jest w środku /etc/php/mods-available. Będą tu już niektóre moduły, każdy w swoim własnym pliku nazwanym od rozszerzenia i kończącym się na .ini. Możesz skopiować jeden, aby użyć go jako szablonu lub utworzyć własny i umieścić w nim całą odpowiednią konfigurację rozszerzenia (przynajmniej potrzebujesz extension=[extensionName].so).
Gdy nowe rozszerzenie będzie dostępne w modach, włącz je, a następnie sprawdź, wykonując:
sudo phpenmod extension
php -m
Spowoduje to utworzenie dowiązań symbolicznych w odpowiednich miejscach dla bieżącej wersji PHP, aby załadować ten moduł, i powinieneś zobaczyć go na liście modułów wyprowadzanych przez php -m. Porada profesjonalisty: jeśli nie widzisz go w danych wyjściowych, przewiń do samego końca danych wyjściowych i sprawdź, czy są tam jakieś przydatne komunikaty o błędach.
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
Skompiluj i zainstaluj 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
Użyjmy ich:
$ 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
Pojedyncza instancja apache nie może jednocześnie uruchamiać dwóch różnych wersji PHP (przynajmniej o ile mi wiadomo).
Nie można zainstalować dwóch różnych wersji PHP z pakietów, ponieważ będą one powodować konflikt (i spróbuj zastąpić te same katalogi).
Rozwiązanie:
b) Skompiluj „inną” wersję PHP ze źródła ręcznie (lub jeśli wolisz, pobierz źródło odpowiedniego pakietu i zmodyfikuj go, aby uniknąć konfliktów i zmodyfikować ścieżki instalacji)
dla a) Utwórz osobny zestaw konfiguracji dla apache z różnymi ścieżkami modułów i osobnym skryptem startowym. I oczywiście uruchom go na osobnym porcie.
nie ma gotowego skryptu do skompilowania tych wielu równoległych instancji php? Po prostu zrobić to ręcznie i załatać ścieżki? SO oznacza to, że wszystkie firmy hostingowe opracowują niestandardowe skrypty do uruchamiania tych równoległych wersji i nigdy nie dzielą się swoimi wysiłkami.
lenzai
4
Pojedyncza instancja apache może uruchamiać jednocześnie 2 wersje php.
Nanne
1
Zamiast tworzyć wielokrotne VirtualHost, po prostu dodaję poniższy kod do mojego .htaccesspliku i, co zaskakujące, zadziałało,
Jeśli chcesz je uruchomić w tym samym czasie, potrzebujesz dwóch różnych portów. Być może możesz po prostu zmienić konfigurację apache (httpd.conf) za pomocą prostego skryptu, który przesuwa jedną lub drugą wersję do właściwej pozycji przed uruchomieniem apache.
Mam już zainstalowany PHP 5.3.5. Jak mogę zainstalować PHP 5.2.17? Czy możesz mi powiedzieć, gdzie i co muszę zmienić, aby przełączać się między tymi dwiema wersjami? Plik httpd.conf jest pusty w mojej instalacji.
Debiprasad
0
Możesz także uruchomić każdą witrynę z różnymi użytkownikami. Więcej Ochrony.
Witamy w Ask Ubuntu! Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
user98085
Nie miałem czasu na zrobienie tego, co powiedziałeś. Chyba chciałem tylko pokazać drogę. Stil musi się nauczyć, jak używać formowania. W każdym razie dzięki!
Henrique Fernandes
0
Napisałem skrypt bash, który pozwala mi łatwo przełączać się między zainstalowanymi wersjami php na moim urządzeniu. Prowadzę kilka wirtualnych hostów, ponieważ mam kilka projektów internetowych z klientami, którzy mają stare i nowe programy. Niektóre z tych projektów wymagają starszych wersji php, a inne wymagają php7.0.
Przeczytaj moje komentarze i upewnij się, że rozumiesz, co się dzieje przed użyciem tego.
#!/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 exitif["$NEWVERSION"=""];then
echo current version is ${array[0]}.To change version please use argument
exit 1fi
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
Miałem ten sam problem, gdy obsługiwałem wiele projektów. Odniosłem się do tego artykułu,
ale było tak, jak za każdym razem, gdy potrzebuję zmieniać wersje, jeśli to konieczne, ale daje to elastyczność dla cli i sieci osobno.
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
waltinator
@waltinator Dzięki za recenzję, na pewno się tym
zajmę
0
Można to zrobić, wyłączając i włączając nową wersję PHP-
przejdź na starszą wersję -
a2dismod
usługa php7.0 uruchomi ponownie apache2
przejdź do nowszej wersji
a2enmod php7.0
usługa apache2 restart
.php
i.php5
. Możesz również skonfigurować swój serwer WWW, aby używał różnych wersji PHP dla różnych portów (jakhttp://localhost:80
ihttp://localhost:8080
) lub różnych domen (jakhttp://localphp52
ihttp://localphp53
), pozostawiając całą pozostałą strukturę folderów nietkniętą, dzięki czemu można łatwo porównać uruchomienie jednej aplikacji internetowej w dwóch środowiskach poprzez zmianę bieżącego URL.Odpowiedzi:
Aby to osiągnąć, możesz użyć menedżera wersji php. Dostępne są różne menedżery wersji, takie jak:
Moim ulubionym jest phpbrew. Mam nadzieję że to pomoże.
źródło
Państwo może uruchomić 2 różne wersje PHP na raz, ale to nie jest tak proste, jak to tylko apt-zachęcając. Musisz uruchomić jedną osobno zainstalowaną wersję i obsłużyć ją zgodnie z ustawieniami w konfiguracji Apache.
Możesz to zrobić na przykład za pomocą fastcgi: w zasadzie to, czego szukasz, to konfiguracja widoczna na tej stronie . Dodajesz inny moduł obsługi w konfiguracji w zależności od potrzebnej sytuacji / portu / domeny. Sztuczka po zainstalowaniu obu wersji jest następująca:
=== z tej strony ==
domyślna:
php5.3.17:
php5.4.7:
Zobacz pełną wersję połączonego pytania . Nie zapomnij także spojrzeć na dwa linki w nagłówku, wyglądają jak fajne samouczki (ale mniej skompresowane). To i tamto
(nie zniechęcaj się faktem, że połączone pytanie jest duże bez żadnej akceptowanej odpowiedzi. Metoda powinna (i działa) dobrze, ale użytkownik zapomniał użyć
<?php
i używał<?
wyłączonych skrótów, zobacz komentarze)źródło
Zainstalowałem php 5.6 i 7.0, ale oprócz wszystkich wskazówek nadal działało 5.6, więc to polecenie oszczędza dzień (w moim przypadku wybieram opcję 1 i ponownie uruchamiam apache):
źródło
phpinfo()
iphp -v
sprawdzaniu krzyżowym, ponieważ oba mogą mieć inną wartość.Ten działa dla mnie: https://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu
Taki sam jak skrypt z „Growling Flea”, ale przy użyciu nowych wersji.
źródło
Z tego postu po prostu uporządkowałem polecenia i wyjaśniłem w kolejności, w jakiej zostałem doręczony (Ubuntu 12.04)
Ta metoda zapewnia:
skrypt z menu, który umożliwia przełączanie zainstalowanych wersji php (nie obu jednocześnie)
różne wersje PHP zainstalowane na twoim serwerze
oddzielne pliki conf
Zainstaluj wszystkie potrzebne wersje (mam dwie)
Zainstaluj zależności:
Zainstaluj PHP 5.3 za pierwszym razem. Pobierz źródła php
Zainstaluj PHP5.6 po raz pierwszy. Pobierz źródła php
Wersje menedżera skryptów PHP: Utwórz plik o nazwie
php.sh
i umieść go w/bin/
:Skompiluj i zainstaluj php 5.3:
Skompiluj i zainstaluj php 5.6
Użyjmy ich:
źródło
Problemy:
Pojedyncza instancja apache nie może jednocześnie uruchamiać dwóch różnych wersji PHP (przynajmniej o ile mi wiadomo).
Nie można zainstalować dwóch różnych wersji PHP z pakietów, ponieważ będą one powodować konflikt (i spróbuj zastąpić te same katalogi).
Rozwiązanie:
b) Skompiluj „inną” wersję PHP ze źródła ręcznie (lub jeśli wolisz, pobierz źródło odpowiedniego pakietu i zmodyfikuj go, aby uniknąć konfliktów i zmodyfikować ścieżki instalacji)
dla a) Utwórz osobny zestaw konfiguracji dla apache z różnymi ścieżkami modułów i osobnym skryptem startowym. I oczywiście uruchom go na osobnym porcie.
źródło
Zamiast tworzyć wielokrotne
VirtualHost
, po prostu dodaję poniższy kod do mojego.htaccess
pliku i, co zaskakujące, zadziałało,Węzeł: Zainstalowałem już
php7.2-fpm
przed użyciem kodu.źródło
Jeśli chcesz je uruchomić w tym samym czasie, potrzebujesz dwóch różnych portów. Być może możesz po prostu zmienić konfigurację apache (httpd.conf) za pomocą prostego skryptu, który przesuwa jedną lub drugą wersję do właściwej pozycji przed uruchomieniem apache.
źródło
Możesz także uruchomić każdą witrynę z różnymi użytkownikami. Więcej Ochrony.
Raz użyłem tego podejścia.
http://blog.servergrove.com/2011/08/22/how-to-setup-multiple-php-versions-on-apache/
Teraz myślę, że lepiej jest używać php-fpm ... ale konfiguracja wielu wersji php jest trochę bardziej skomplikowana.
Będzie musiał uruchomić wiele php-fpms i ustawić apache, aby się ze sobą korzystali.
źródło
Napisałem skrypt bash, który pozwala mi łatwo przełączać się między zainstalowanymi wersjami php na moim urządzeniu. Prowadzę kilka wirtualnych hostów, ponieważ mam kilka projektów internetowych z klientami, którzy mają stare i nowe programy. Niektóre z tych projektów wymagają starszych wersji php, a inne wymagają php7.0.
Przeczytaj moje komentarze i upewnij się, że rozumiesz, co się dzieje przed użyciem tego.
źródło
Miałem ten sam problem, gdy obsługiwałem wiele projektów. Odniosłem się do tego artykułu, ale było tak, jak za każdym razem, gdy potrzebuję zmieniać wersje, jeśli to konieczne, ale daje to elastyczność dla cli i sieci osobno.
Przejście z php5.6 na php7.0
W przypadku Apache możemy użyć polecenia jako:
W przypadku interfejsu wiersza polecenia możemy użyć polecenia jako:
Przejście z php7.0 na php5.6
W przypadku Apache możemy użyć polecenia jako:
W przypadku interfejsu wiersza polecenia możemy użyć polecenia jako:
źródło
Można to zrobić, wyłączając i włączając nową wersję PHP-
źródło