उबंटू पर एक साथ कई php संस्करण


16

मैं उबंटू 12.04 पर चलने वाले अपने विकास बॉक्स पर कई php संस्करण चलाने में सक्षम होना चाहता हूं। मैं जो पूरा करना चाहता हूं वह यह है कि जब मैं लोकलहोस्ट का उपयोग करता हूं तो डोमेन डिफ़ॉल्ट रूप से उपयोग किया जाता है (मान लीजिए php 5.3.17)। जब मैं 547.localhost का उपयोग करता हूं तो डोमेन php 5.4.7 का उपयोग किया जाता है। मैंने Fastcgi का उपयोग करके इस कार्य को प्राप्त करने के लिए कुछ ट्यूटोरियल देखे हैं, लेकिन अब तक मैं इसे काम करने में सक्षम नहीं कर पाया हूं। मैंने इन ट्यूटोरियल को देखा है:

  1. http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multiple-php-versions-ubuntulucid-10-04/
  2. http://www.metod.si/multiple-php-versions-with-apache-2-fastcgi-phpfarm-on-ubuntu/

जहां तक ​​मैं देख सकता हूं मैंने वह सब कुछ किया है जिसकी जरूरत है। समस्या यह है कि php बस नहीं चलता है। जब मैं इसके पास जाता हूं http://localhost/somephpfile.phpतो बस php फ़ाइल के स्रोत का आउटपुट होता है। उसी के लिए http://547.localhost/somephpfile.php

मैं इस बात को तोड़ दूंगा कि मैंने इस उम्मीद में क्या कदम उठाए हैं कि कोई मुझे याद करने में सक्षम है।

  1. पहले मैंने एक डिफ़ॉल्ट लैंप स्टैक का उपयोग करके स्थापित किया sudo apt-get install lamp-server^ phpmyadmin। इसके बाद मेरे पास php के रिपॉजिटरी संस्करण को चलाने वाला एक कार्यशील विकास सर्वर था।
  2. फिर मैंने दो php इंस्टॉल बनाने के लिए phpfarm का उपयोग किया, एक 5.3.17 के लिए और 5.4.7 के लिए एक। Phpfarm का स्थानीयकरण है /etc/php/phpfarm, इसलिए निष्पादक अंदर हैं/etc/php/phpfarm/inst/php-{version}/bin
  3. फिर मैं अपाचे और disabe mod_php के लिए suaxec और fastcgi को सक्षम करता हूं sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. अगला, मैंने /etc/apache2/mods-enabled/fastcgi.confपढ़ने के लिए संपादित किया:

    <IfModule mod_fastcgi.c>   
        FastCgiIpcDir /var/lib/apache2/fastcgi  
        FastCgiWrapper /usr/lib/apache2/suexec   FastCgiConfig -idle-timeout
        110 -killInterval 120 -pass-header HTTP_AUTHORIZATION -autoUpdate  
        ScriptAlias /php-fcgi/ /var/www/cgi-bin/ 
    </IfModule>
    
  5. फिर /var/www/मैंने एक फोल्डर बनाया cgi-bin और इस फोल्डर में दो फाइल्स, दोनों में से प्रत्येक के लिए दो php वर्जन निम्नानुसार हैं (मैं केवल 5.3.17 के लिए एक दिखाता हूं /var/www/php5317.fcgi):

    #!/bin/sh
    # you can change the PHP version here.
    version="5.3.17"
    # php.ini file location, */php-5.2.13/lib equals */php-5.2.13/lib/php.ini.
    PHPRC=/etc/php/phpfarm/inst/php-${version}/lib/php.ini
    export PHPRC
    
    PHP_FCGI_CHILDREN=3
    export PHP_FCGI_CHILDREN
    
    PHP_FCGI_MAX_REQUESTS=5000
    export PHP_FCGI_MAX_REQUESTS
    
    # which php-cgi binary to execute
    exec /etc/php/phpfarm/inst/php-${version}/bin/php-cgi
    
  6. अंतिम चरण वर्चुअल होस्ट बनाना था। अंत में मेरे पास तीन फाइलें हैं /etc/apache2/sites-enabled: 000-डिफ़ॉल्ट, php5.3.17 और php5.4.7 निम्नलिखित सामग्री के साथ:

    चूक:

    <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>
    
  7. अंत में मैंने पढ़ने के लिए / etc / मेजबानों को बदल दिया

    127.0.0.1   localhost
    127.0.0.1   547.localhost
    127.0.0.1   5317.localhost
    
    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    

अब मुझे काम करने की उम्मीद होगी, लेकिन दुख की बात है कि वे काम नहीं करते। इसके बजाय कि एक php फाइल php से चलती है, यह सिर्फ कच्ची फाइल को आउटपुट करती है।

ऐसा कुछ होना चाहिए जो मुझे यहाँ याद आया हो, लेकिन मैं कई बार इस प्रक्रिया से गुज़रा हूँ और मैं यह पता नहीं लगा सकता कि यह कहाँ गलत है।


1 बात यह है कि अगर मैंने cgi फ़ाइलों को नाम दिया जैसे कि आपने काम नहीं किया। उदाहरण के लिए या सिर्फ नाम बदलने /var/www/cgi-bin/php-cgi-5.4.7का प्रयास करें । क्या आप मदद कर सकते हैं? सिर्फ 5.4.7 संस्करण के लिए। /var/www/cgi-bin/php54.fcgi/var/www/cgi-bin/php.fcgi

मैंने जाँच की है और दुर्भाग्य से यह मदद नहीं करता है। मैंने इस बदलाव को दर्शाने के लिए Action php-cgi /php-fcgi/php547.fcgi

मैंने इन परिवर्तनों को प्रतिबिंबित करने के लिए पोस्ट को अपडेट किया है क्योंकि मुझे लगता है कि यह वैसे भी अच्छा है

हम्म, मैं तब अन्य सकारात्मकता के लिए जाँच करूँगा। :)

मैं सोच रहा था, शायद मुझे suexec सामान की आवश्यकता नहीं है क्योंकि मुझे प्रत्येक php संस्करण के लिए अलग-अलग उपयोगकर्ताओं की आवश्यकता नहीं है?

जवाबों:


2

अपने virtualhosts में आपने एक हैंडलर जोड़ा है, लेकिन आपने हैंडलर सेट नहीं किया है, इसीलिए इसे संसाधित नहीं किया गया है। जोड़ें:

<FilesMatch "\.php$">
    SetHandler php-cgi
</FilesMatch>

</Directory>प्रत्येक वर्चुअल होस्ट फ़ाइल में पहले ।


0

मुझे SeeDoubleYou द्वारा यह छोटा कदम-दर-चरण अवलोकन पसंद आया और मैं इसे स्वयं आज़माना चाहता था। क्या गायब था

  • sudo chmod +x /var/www/cgi-bin/*
    • चूंकि यह निष्पादित नहीं किया गया था, अपाचे cgi स्क्रिप्ट को निष्पादित करने में सक्षम नहीं था
    • यह फ़ाइल Action php-cgi /php-fcgi/php<version>.fcgi में लाइन के लिए आवश्यक हैvhost.conf
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • suexec निष्पादन योग्य और Fastcgi मॉड्यूल गायब थे, उन्हें पहले स्थापित किया जाना था
    • फ़ाइल FastCgiWrapper /usr/lib/apache2/suexecमें पंक्ति के लिए suexec निष्पादन योग्य आवश्यक हैfastcgi.conf
  • मुझे भी लाइन हटानी पड़ी FastCgiIpcDir /var/lib/apache2/fastcgi
    • अन्यथा मुझे त्रुटि संदेश मिला FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

Php_admin_value और php_value को .htaccess या vhosts फ़ाइलों के माध्यम से सेट करने की कोशिश करने वाले किसी भी व्यक्ति के लिए: यह FCGI के साथ संभव नहीं है। इसके बजाय आप .user.ini फ़ाइलों का उपयोग निर्देशिका विशिष्ट php.ini कॉन्फ़िगरेशन सेट करने के लिए कर सकते हैं ।

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