Egy módja és egyben a legrégibb módja a több PHP verzió használatának Apache szerveren a címben szereplő mod_cgi és mod_cgid modulok használata. Tesztidőszak alatt jó megoldás lehet és nem igényel további külső modulokat. Ebben a fejezetben ennek beállítását mutatom be a korábban beállított virtuális hosztokon.
A fejezet elolvasása előtt mindenképp nézd meg az előkészületekről szóló részt: PHP CGI megoldások Apache webszerveren
Apache 2.4-ben
Először engedélyezni kell a mod_cgid modult
A fájlban a következő sor elejéről kell kivenni a kettőskeresztet
Valamint az "Actions" modult is engedélyezni kell ugyanígy:
Ez után hozzáférést kell adni a CGI wrapperekhez:
<Directory /var/www/cgi-bin/>
Require all granted
</Directory>
Majd a virtuális hoszt definíciójában kell az eredeti PHP verziót kikapcsolni, amit modulként fordítottunk bele, valamint az "Action" utasítást használva hivatkozni a CGI wrapper szkriptre.
PHP 5.4.14-hez
És a <Directory>
sor elé írni a következő két sort:
Action application/x-httpd-php /php/php-5414
Az egyértelműség kedvéért mutatom egyben is az egész fájl tartalmát:
ServerName p5414.a24.vm1
ServerAlias www.p5414.a24.vm1
DocumentRoot "/var/www/vhosts/vm1/a24/p5414/www"
ErrorLog "/var/www/vhosts/vm1/a24/p5414/_logs/error.log"
CustomLog "/var/www/vhosts/vm1/a24/p5414/_logs/access.log" common
php_flag engine off
Action application/x-httpd-php /php/php-5414
<Directory "/var/www/vhosts/vm1/a24/p5414/www">
Require all granted
</Directory>
</VirtualHost>
Most pedig hozzunk létre egy index.php-t egy phpinfo() függvényhívással:
Ha ez megvan, akkor újraindítjuk a webszervert és a http://p5414.a24.vm1/index.php oldalon betölt a php info. Amiben ha az elején a "Server API" mellett "CGI/FastCGI" látszik, akkor jól sikerült a beállítás.
PHP 5.3.24-hez
Teljesen ugyanaz a lépéssorozat, mint az előbb, csak most a következő két új sor kerül a virtuális hoszt definícióba:
Action application/x-httpd-php /php/php-5324
És természetesen az index.php fájl is máshova kerül:
PHP 5.2.17-hez
Hasonlóan az előzőekhez, a két új sor:
Action application/x-httpd-php /php/php-5217
És az index.php létrehozása:
Apache 2.2-ben
Apache 2.2 esetén hasonlóak a lépések, mint 2.4-ben voltak, csak a
helyett
Allow from all
kerül a fájlokba. Ezen kívül az alap konfiguráció szerint nincsenek "so" kiterjesztésű fájlokba gyűjtve a modulok a "modules" mappába. Így, mivel a szükséges modulok alapértelmezetten engedélyezettek, nincs mit engedélyezni a httpd.conf-ban.
Ha az Apache-ot a "--enable-mods-shared=all" kapcsolóval fordítottuk volna, akkor minden modul létrejött volna a "modules" mappában is. Az "--enable-modulneve=shared" módon pedig csak a kiszemelt modul.
Ezen kívül a mod_cgi modul van engedélyezve alapértelmezetten. Ellentétben a 2.4-es Apache beállításaival.
Az Apache szerver bin könyvtárában az "apachectl" szkriptet a "-l" ( mínusz kis L ) paraméterrel hívva listázhatók a befordított modulok. apachectl -l
Tehát röviden
Az httpd.conf végére bekerül a következő:
<Directory /var/www/cgi-bin/>
Order allow,deny
Allow from all
</Directory>
PHP 5.4.14-hez
A virtuális hoszt leírásába bekerül a következő két sor:
Action application/x-httpd-php /php/php-5414
És kap egy index.php-t egy php info-val.
PHP 5.3.24-hez
A virtuális hoszt leírásába bekerül a következő két sor:
Action application/x-httpd-php /php/php-5324
És kap egy index.php-t egy php info-val.
PHP 5.2.17-hez
A virtuális hoszt leírásába bekerül a következő két sor:
Action application/x-httpd-php /php/php-5217
És kap egy index.php-t egy php info-val.
PHP beállítások
Tudni kell erről a megoldásról, hogy minden alkalommal beolvassa a szerver a php.ini-t, így bármit módosítunk benne, a szerver újraindítása nélkül érvényes lesz.
Egyedi php.ini-t úgy lehet minden virtuális hoszthoz rendelni, ha mindegyikhez egyedi CGI wrapper-t is készítünk. A php-cgi binárist pedig a "-c" kapcsolóval futtatjuk, ami után az egyedi php.ini fájlt kell elhelyezni. Tehát így nézne ki egy wrapper szkript 5.4.14-es PHP-t futtatva:
exec /opt/php/5.4.14/bin/php-cgi -c /var/www/vhosts/vm1/a24/p5414/php.ini
Ha a php.ini virtuális hoszt könyvtárának gyökerébe ( Nem a DocumentRoot-ba !!! ) kerülne
PHP 5.3-tól bejött a PATH és HOST szekció a php.ini -ben, amivel adott domainhez vagy könyvtárhoz rendelhetünk egyedi PHP beállításokat központilag CGI/FastCGI módban. Ez is egy lehetőség, de főleg akkor, ha az ekként futó hosztoknak egy másik közös php.ini-jük van, hogy ne gyűljön a szemét az eredetiben.
További információ: http://us3.php.net/manual/en/ini.sections.php
Szintén PHP 5.3-tól használható a htaccess-style ini, a ".user.ini" nevű ini fájl, ami az eredeti php.ini beállításait úgy tudja módosítani, akár a htaccess, csak php.ini szintaktikával. Ehhez azonban nincs szükség az Apache szerveren az "AllowOverride Options" beállításra.
További információ: http://www.php.net/manual/en/configuration.file.per-user.php és http://www.php.net/manual/en/configuration.changes.php
Alapesetben a php.ini-ben a "cgi.fix_pathinfo" opció értéke 1-es. Azaz bekapcsolt állapotú. Ez annyit jelent, hogy a "SCRIPT_FILENAME" szerverváltozóban a futtatott PHP szkript útvonala kerül. Ha a "cgi.fix_pathinfo" értéke 0, akkor a cgi-wrapper szkript útvonalát látnánk a "SCRIPT_FILENAME" változóban. .
Összefoglalás
Ez tehát az egyik módja a több PHP verzió futtatásának. Akár itt is meg lehetne állni és rögtön használatba venni a szervert. Dolgozni már lehet rajta, de még mindig maradtak problémák. A jogosultságokról például még szó sem esett. Ám az alapfelálláshoz képest, ahol egyetlen PHP verzió volt hasonló módon, máris előrébb vagyunk.
Lehet menteni ezt a gépet is wtk-vm1-v7 néven.