कैसे एक विकास LAMP सर्वर पर PHP 5.x के कई संस्करण चला सकते हैं?


81

मुझे अपने PHP अनुप्रयोगों को PHP 5.x के कई संस्करणों जैसे PHP 5.0.0 और PHP 5.2.8 के साथ परीक्षण करने की आवश्यकता है।

क्या कोई तरीका है कि मैं एक विकास LAMP सर्वर को कॉन्फ़िगर कर सकता हूं ताकि मैं PHP5 के कई संस्करणों के साथ अनुप्रयोगों का जल्दी से परीक्षण कर सकूं?


आपको एक पैथ चर का उपयोग करने में सक्षम होना चाहिए, लेकिन मैं 100% नहीं हूं इसलिए मैं प्रतिनिधि के लिए जवाब नहीं दे रहा हूं
मैलिफिस्ट

ISPConfig 3 (Ubuntu 12.10) के साथ कई PHP संस्करणों (PHP-FPM & FastCGI) का उपयोग कैसे करें - @ hek2mgl: विकास उपकरण के बारे में प्रश्न ऑफ़-टॉपिक नहीं हैं।
हकरे

@ फक एग्री, एफपीएम के उपयोग से यह संभावना कम हो जाती है कि एक अपाचे मॉड्यूल के रूप में लोड होने पर कई संस्करण एक-दूसरे को प्रभावित करते हैं :)
Ja13ck

@ जैक: अर्घ, अपाचे मॉड्यूल नहीं,
FCGI

अब तक मैंने phpbrew और php-version की कोशिश की है, लेकिन वे दोनों PHP को संकलित करने में विफल लगते हैं।
अच्छा गधा

जवाबों:


17

ऐसा करने का एक तरीका यह है कि आप अपने मुख्य संस्करण को php को mod_php के साथ सेट करें और अन्य सभी को तेज बंदरगाहों पर अलग-अलग बंदरगाहों (यानी 81, 82, 83 आदि) पर चलाएं। हालांकि यह पूरी तरह से सुसंगत व्यवहार की गारंटी नहीं देगा।


32
एक विचार: PHP 5.2.1 के लिए, पोर्ट 10521 का उपयोग करें। 5.0.0 के लिए, 10500 का उपयोग करें :)
वेन

2
एक अन्य विकल्प विभिन्न रास्तों के तहत CGI (या FastCGI) का उपयोग करके इसे चलाना होगा - अर्थात / cgi500 /, / cgi528 /, ...
ग्रे पैंथर

यदि आप डेबियन पर हैं और पैकेजिंग का उपयोग करना चाहते हैं, तो मैं एक chroot सिस्टम बनाने के लिए debootstrap का उपयोग करने की सलाह देता हूं जो आपके PHP संस्करण को रखता है, फिर Apache को chroot'ed सिस्टम के अंदर कॉन्फ़िगर करें।
मैक्स त्सेपकोव

23

CentOS के साथ, आप इसे PHP के एक संस्करण के लिए fastcgi के संयोजन का उपयोग करके कर सकते हैं, और दूसरे के लिए php-fpm, जैसा कि यहाँ वर्णित है:

https://web.archive.org/web/20130707085630/http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server

अपाचे के लिए केवल CentOS 5.6 पर आधारित है

1. rpmforge और एपल यम रिपॉजिटरी को सक्षम करें

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. php-5.1 स्थापित करें

CentOS / RHEL 5.x श्रृंखला में php-5.1 बॉक्स है, बस इसे यम के साथ स्थापित करें, जैसे:

sudo yum install php php-mysql php-mbstring php-mcrypt

3. स्रोत से php 5.2 और 5.3 को संकलित और स्थापित करें

5.2 और 5.3 के लिए, हम इंटरनेट पर कई आरपीएम पैकेज पा सकते हैं। हालांकि, वे सभी संघर्ष php के साथ आते हैं जो CentOS के साथ आते हैं, इसलिए, हम बेहतर बनाने और उन्हें soure से स्थापित करेंगे, यह मुश्किल नहीं है, बिंदु अलग-अलग स्थान पर php स्थापित करना है।

हालाँकि, जब एप्प को एक अपाचे मॉड्यूल के रूप में स्थापित किया जाता है, हम केवल उसी समय php के एक संस्करण का उपयोग कर सकते हैं। यदि हमें एक ही सर्वर पर php के विभिन्न संस्करण को चलाने की आवश्यकता है, तो एक ही समय में, उदाहरण के लिए, अलग-अलग वर्चुअल होस्ट को php के अलग-अलग संस्करण की आवश्यकता हो सकती है। सौभाग्य से, शांत FastCGI और PHP-FPM मदद कर सकता है।

Fastcgi सक्षम के साथ php-5.2 का निर्माण और स्थापित करें

1) आवश्यक देव संकुल स्थापित करें

yum install gcc libxml2-devel bzip2-devel zlib-devel \
    curl-devel libmcrypt-devel libjpeg-devel \
    libpng-devel gd-devel mysql-devel

2) संकलित करें और स्थापित करें

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) एक Fastcgi आवरण स्क्रिप्ट बनाएँ

फ़ाइल /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/

Php-fpm को कॉन्फ़िगर करें

/Etc/php53/php-fpm.conf संपादित करें, कुछ सेटिंग्स बदलें। यह कदम मुख्य रूप से कुछ सेटिंग्स को अनसुना करने के लिए है, आप चाहें तो मूल्य समायोजित कर सकते हैं।

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

फिर, एफपीएम शुरू करें

sudo /etc/init.d/php-fpm start

स्थापित करें और 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

वर्चुअल होस्ट सेटअप और परीक्षण करें

1) निम्नलिखित लाइन को / etc / मेजबानों में जोड़ें

127.0.0.1 web1.example.com web2.example.com web3.example.com

2) वेब डॉक्यूमेंट रूट बनाएं और इसके तहत एक index.php छोड़ें, यूजर रूट को phpinfo स्विच दिखाने के लिए, रन करें

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

नोट: खाली / var / www / fcgi-bin डायरेक्टरी की आवश्यकता है, IT लेटर को रिमूव न करें

3) Apache config फाइल बनाएं (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) अपाचे को पुनरारंभ करें। phpinfo को देखने और परिणाम को मान्य करने के लिए 3 साइटों को सम्मानपूर्वक देखें। अर्थात:

http://web1.example.com
http://web2.example.com
http://web3.example.com

यदि सब ठीक है, तो आप वांछित वर्चुअल संस्करण के साथ नए वर्चुअल होस्ट बनाने के लिए 3 वर्चुअल होस्ट में से एक का उपयोग कर सकते हैं।


1
यह हालांकि एक लिंक केवल उत्तर है। कृपया पूरी तरह से दूसरी साइट पर निर्भर होने के बजाय उत्तर में प्रासंगिक विवरण शामिल करें। लिंक में कष्टप्रद समस्या है जो वे गायब हो सकते हैं, और इस तरह एसओ में अभी भी प्रासंगिक जानकारी नहीं है।
मार्टन बोडेवेस

आप CloudLinux में देखना चाह सकते हैं। यह एक सॉल्यूशन सॉल्यूशन है लेकिन इसकी कीमत काफी कम है।
22

1
सही उत्तर! यहाँ उबंटू के लिए एक ही समाधान है: howtoforge.com/-
Tobias Gaertner

10

अपाचे + php के कई उदाहरण होने के कारण वास्तव में मेरे फैंस को कभी गुदगुदी नहीं हुई, लेकिन यह शायद इसे करने का सबसे आसान तरीका है। आप KISS की तरह महसूस नहीं करते हैं ... यहाँ एक विचार है।

अपनी अपाचे को उठाइए और चलाइए, और इसे कॉन्फ़िगर करने की कोशिश कीजिए जैसे कि डेबियन और ubuntu इसे करते हैं, उदाहरण के लिए, लोड किए गए मॉड्यूल के लिए निर्देशिकाएं हैं। आपकी अपाचे डिस्क इस तरह से लाइनों का उपयोग कर सकती है:

Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

फिर अपने php के पहले संस्करण का निर्माण करें, और इसे एक उपसर्ग दें जिसमें संस्करण संख्या स्पष्ट रूप से समाहित है, जैसे, /usr/local/php/5.2.8, /usr/local/php/5.2.6 ...

कॉन्फिडेंस / लोड कुछ इस तरह दिखेगा:

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

संस्करणों को स्विच करने के लिए, आपको बस इतना करना है कि लोड को बदलना है और निर्देशिका एपाचे से फाइलों को दूसरे संस्करण के लिए लोगों पर शामिल करना है। आप इसे एक साधारण बैश स्क्रिप्ट के साथ स्वचालित कर सकते हैं (वास्तविक फ़ाइल को हटा दें, जगह में वैकल्पिक संस्करण फ़ाइल की प्रतिलिपि बनाएँ, और अपाचे को पुनरारंभ करें।

इस सेटअप का एक फायदा यह है कि सब कुछ कंसिस्टेंट है, इसलिए जब तक आप php.ini के विकल्प और मॉड्यूल (जो आपको CGI के साथ वैसे भी करना होगा) के संदर्भ में समान रहते हैं। वे सभी SAPI से गुजर रहे हैं। आपके एप्लिकेशन को किसी भी परिवर्तन की आवश्यकता नहीं होगी, और न ही संबंधित URL का उपयोग करने की आवश्यकता होगी।

मुझे लगता है कि यह काम करना चाहिए, लेकिन फिर से, मैंने इसकी कोशिश नहीं की है, और न ही मुझे ऐसा करने की संभावना है क्योंकि मेरे पास आपके जैसी आवश्यकताएं नहीं हैं। यदि आप कभी भी कोशिश करते हैं तो टिप्पणी करें।


8

नोट: निम्न विधि विंडोज़ पर काम करेगी।

एक वैकल्पिक विधि (यदि एक बार में PHP का एक ही संस्करण चलाना ठीक है) एकाधिक अपाचे सेवाओं को परिभाषित करना है, जिनमें से प्रत्येक एक अलग PHP संस्करण का उपयोग करेगा।

अपाचे कॉन्फ़िगरेशन फ़ाइल में सबसे पहले उपयोग की शर्तें:

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

अब httpd.exe का उपयोग करके कमांड लाइन से दो अलग-अलग सेवाएं बनाएं (प्रशासक को उन्नत):

httpd.exe -k install -n Apache224_php54 -D php54

httpd.exe -k install -n Apache224_php55 -D php55

अब आप एक समय में उपरोक्त सेवाओं में से एक शुरू कर सकते हैं (दूसरे को शुरू करने से पहले बंद करना चाहिए)।

यदि आपने पहले अपाचे को सेवा के रूप में स्थापित किया है, तो आप नीचे दिए गए कमांड का उपयोग करके उसे हटा सकते हैं (आपके द्वारा उपयोग की गई सेवा का नाम बदल सकते हैं):

apache -k uninstall -n Apache224

एक और नोट यह है कि मैं व्यक्तिगत रूप से एक "सूचना क्षेत्र आइकन कार्यक्रम" का उपयोग करता हूं जिसे "सेओबीज़ु" कहा जाता है, ताकि सेवाओं को शुरू करने और आवश्यकतानुसार बंद किया जा सके। मैंने उपरोक्त दोनों सेवाओं को इसमें जोड़ा है।


यह वास्तव में एक बहुत ही स्मार्ट समाधान है। यदि आप समानांतर में कई सेवाएं चलाना चाहते हैं, तो आप क्रमशः Listen 80और Listen 81प्रत्येक में शामिल कर सकते हैं ifdefine
caiosm1005

अच्छा विचार है, लेकिन सवाल एक LAMP सर्वर के बारे में है, WAMP सर्वर के बारे में नहीं।
विनीसियस मोंटेइरो

4

यह समझना कि आप शायद स्थानीय / डेस्कटॉप मशीन के बारे में बात कर रहे हैं और संभवतः जारी रखना चाहेंगे बारे में बात , मैं सिर्फ आपके लिए कोई विकल्प बाहर फेंक दूंगा अगर यह आपकी या किसी और की मदद कर सकता है:

क्लाउड में कई वर्चुअल सर्वर इंस्टेंसेस सेट करें, और अपने कोड को उनके बीच एक गिट रिपॉजिटरी (या मर्क्यूरियल के रूप में साझा करें, मुझे लगता है, हालांकि मुझे कोई व्यक्तिगत अनुभव नहीं है कि आपको वास्तव में कुछ विकेंद्रीकृत होना चाहिए)। इससे आपको यथासंभव उत्पादन अनुभव के करीब देने का लाभ होता है, और यदि आपके पास सर्वर स्थापित करने का अनुभव है, तो यह उतना जटिल नहीं है (या महंगा, यदि आप किसी सर्वर को स्पिन करना चाहते हैं, तो वही करें जो आपको करने की आवश्यकता है, तो इसे फिर से नीचे स्पिन करें, तो आप कुछ सेंट के बारे में बात कर रहे हैं 50 सेंट कहने के लिए, कुछ रुपये तक अगर आप बस इसे चलाना छोड़ देते हैं)।

मैं इन दिनों अपने सभी प्रोजेक्ट डेवलपमेंट क्लाउड में करता हूं और मैंने स्थानीय / गैर-वर्चुअलाइज्ड इंस्टॉल का उपयोग करते हुए बुनियादी ढांचे को प्रबंधित करने के लिए बहुत सरल पाया है, और यह इस तरह के साइड-बाय-साइड परिदृश्य को निष्पक्ष बनाता है सीधे आगे। मैं सिर्फ इस विचार को वहाँ फेंकना चाहता था यदि आपने इस पर विचार नहीं किया था।


3

मैंने अभी Ubuntu 10 पर PHP5.3 से सफलतापूर्वक डाउनग्रेड किया है।

ऐसा करने के लिए मैंने निम्नलिखित स्क्रिप्ट का उपयोग किया:

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

कमांड लाइन से स्क्रिप्ट चलाने का तरीका जानने वाले किसी के लिए, यहां संक्षिप्त ट्यूटोरियल नहीं है:

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

ये 6 चरण आपके होम डायरेक्टरी में "बिन" नामक फ़ोल्डर में एक स्क्रिप्ट बनाते हैं। आप निम्न कमांड को कॉल करके इस स्क्रिप्ट को चला सकते हैं:

~/bin/myscriptname.sh

औलिया!

उम्मीद है कि यह आप में से कुछ की मदद करता है!

संदर्भ के लिए, यहां मुझे स्क्रिप्ट मिली है: Ubuntu 10 के लिए PHP5.2.10

वहाँ पर कई लोग हैं जो इस बात की पुष्टि करते हैं कि यह काम करता है, और इसने मेरे लिए एक इलाज का काम किया।


अच्छी स्क्रिप्ट, हालांकि कर्म मेरे लिए काम नहीं करता था क्योंकि मैं पावर पीसी पर था। मैंने बस अपने वर्तमान इंस्टॉलेशन को हटाने के लिए स्क्रिप्ट का इस्तेमाल किया, फिर मैन्युअल रूप से 2.14
जेसन

2

Rasmus Lerdorf, जिसने PHP बनाया है, एक सक्रिय Vagrant समाधान बना रहा है जो आपकी आवश्यकताओं को हल करने के लिए लगता है। यह PHP संस्करणों के बीच जल्दी से स्विच करने की अनुमति देता है, वर्तमान में 20 से अधिक विभिन्न संस्करणों का समर्थन कर रहा है। यह एक नगीनेक्स सर्वर के साथ बॉक्स से बाहर आता है, लेकिन आसानी से एक प्रीकॉन्फ़िगर्ड सेटिंग के साथ Apache2 पर स्विच किया जा सकता है। यह बॉक्स से बाहर MySQL का भी समर्थन करता है।

इस तरह आपके पास PHP के सभी संस्करणों तक पहुंच होगी, जो मुख्य वेब सर्वरों में से दो पर तैनात है, एक अच्छे योनि बॉक्स में, जो PHP के पीछे बड़े आदमी द्वारा बनाए रखा गया है।

अधिक जानकारी के लिए मैं श्री द्वारा दी गई बात का संदर्भ देना चाहूंगा। Lerdorf पर https://youtu.be/6XnysJAyThs?t=2864 पर

Vagrant समाधान युक्त github रिपॉजिटरी https://github.com/rlerdorf/php7dev पर पाया जाता है


यह शायद, IMHO, 'सर्वश्रेष्ठ' उत्तर है - प्रत्येक संस्करण के लिए एक अलग VM (लेकिन क्या आप एक मेल पते पर कई संस्करण चला सकते हैं?)। लेकिन विडंबना यह है कि php के निर्माता को यह कैसे करना चाहिए - php का सबसे बड़ा दोष संस्करणों के बीच संगतता की कमी होना चाहिए, जो जूमला बनाता है, उदाहरण के लिए, बेकार के बगल में।
ईएमएल

0

मेरे पास अपने बॉक्स पर कई प्रोजेक्ट चल रहे हैं। यदि आप पहले से ही एक से अधिक संस्करण स्थापित कर चुके हैं, तो यह बैश स्क्रिप्ट आपको आसानी से स्विच करने में मदद करनी चाहिए। फिलहाल मेरे पास php5, php5.6, और php7.0 है, जिसे मैं अक्सर उस प्रोजेक्ट के आधार पर आगे-पीछे घुमाता हूं, जिस पर मैं काम कर रहा हूं। यहाँ मेरा कोड है।

नकल करने के लिए स्वतंत्र महसूस करें। सुनिश्चित करें कि आप समझते हैं कि कोड कैसे काम करता है। यह वेबहोस्टिन के लिए है। मेरे स्थानीय बॉक्स मेरे mods / etc / apache2 / mods- सक्षम / पर संग्रहीत हैं

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

परीक्षण के लिए मैं अलग-अलग आईपी पते पर httpd के कई उदाहरण चलाता हूं, इसलिए मेरे पास 192.168.0.70 पर php7 चल रहा है और php5.6 192.168.0.56 पर चल रहा है। उत्पादन में मेरे पास एक पुराना ओएसकॉमर्स चलाने वाली साइट है जो php5.3 चला रही है और मेरे पास साइट के लिए बस एक अलग फाइल है

httpd -f /etc/apache2/php70.conf
httpd -f /etc/apache2/php53.conf

यह अलग- php.iniअलग साइटों के लिए अलग- अलग फाइलें रखने का एक साफ तरीका भी है। यदि आपके पास बस कुछ ही साइटें हैं अगर चीजों को व्यवस्थित रखने का एक अच्छा तरीका है और आपको कुछ भी अपग्रेड करते समय एक बार में 1 साइट के बारे में अधिक चिंता करने की आवश्यकता नहीं है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.