Έχω ένα dedicated server στον οποίο τρέχω PHP 5.2, για λόγους συμβατότητας με κάποιες παλιές εφαρμογές. Πλέον όμως αυτή η έκδοση είναι ξεπερασμένη, οπότε έψαχνα να βρω μια λύση ώστε να τρέχω διαφορετικές εκδόσεις της PHP ανάλογα με το site.
Το cpanel/whm έχει πολύ ωραία εργαλεία για την αυτόματη εγκατάσταση της έκδοσης που θέλουμε και τα κάνει όλα να φαίνονται πολύ εύκολα, αλλά δυστυχώς επιτρέπει μόνο μια PHP έκδοση. Παρ’ όλα αυτά, σε πολλές hosting εταιρείες με cPanel, οι χρήστες μπορούν να αλλάζουν εκδόσεις της php μέσα από απλές εντολές στο .htaccess. Πως γίνεται αυτό;
Ψάχνοντας λίγο είδα ότι μπορείς ουσιαστικά να τρέξεις όσες διαφορετικές εκδόσεις της PHP θέλεις, αν την τρέχεις μέσω suPHP, CGI ή FastCGI. Ο server έτσι κι αλλιώς είναι στημένος με suPHP για λόγους ασφαλείας, οπότε τα πράγματα από εκεί και πέρα είναι σχετικά εύκολα.
Η ιδέα είναι ότι εγκαθιστούμε την κάθε έκδοση σε δικό της directory, και μετά για κάθε account λέμε ποια έκδοση της php θέλουμε να τρέξει, ή αν δεν το διευκρινίσουμε, τρέχει την default του cpanel (αν δεν το πειράξουμε και αυτό).
Ας πούμε λοιπόν ότι έχουμε στο server την 5.2.κάτι και θέλουμε να περάσουμε και την 5.5.3. Μέσω ssh κάνουμε login ως root και δίνουμε:
# cd /usr/src
# wget http://gr2.php.net/distributions/php-5.5.3.tar.gz
# tar xfz php-5.5.3.tar.gz
# cd php-5.5.3
Με άλλα λόγια, κατεβάζουμε το release που θέλουμε στο φάκελο /usr/src και το αποσυμπιέζουμε. Όλα τα αρχεία περνάνε στο φάκελο /usr/src/php-5.5.3.
Τώρα δίνουμε κάτι σαν:
# ./configure \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-gd-native-ttf \
--enable-libxml \
--enable-mbstring \
--enable-pdo=shared \
--enable-soap \
--enable-sockets \
--prefix=/opt/php55 \
--with-bz2 \
--with-config-file-path=/opt/php55/lib \
--with-config-file-scan-dir=/opt/php55/lib/php.ini.d \
--with-curl=/opt/curlssl/ \
--with-freetype-dir=/usr \
--with-gd \
--with-gettext \
--with-imap=/opt/php_with_imap_client/ \
--with-imap-ssl=/usr \
--with-jpeg-dir=/usr \
--with-kerberos \
--with-libxml-dir=/opt/xml2 \
--with-libxml-dir=/opt/xml2/ \
--with-mcrypt=/opt/libmcrypt/ \
--with-mysql=/usr/ --with-libdir=lib64 \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-mysqli=/usr/bin/mysql_config \
--with-openssl=/usr \
--with-openssl-dir=/usr \
--with-pcre-regex=/opt/pcre \
--with-pdo-mysql=shared \
--with-pdo-sqlite=shared \
--with-png-dir=/usr \
--with-pspell \
--with-xpm-dir=/usr \
--with-zlib \
--with-zlib-dir=/usr
για να ορίσουμε το configuration με το οποίο θα γίνει η εγκατάσταση της php. Προφανώς αυτό το προσαρμόζει ο καθένας στα μέτρα του, οι διάφοροι παράμετροι ορίζουν ποια extensions της php θέλουμε να εγκαταστήσουμε κ.λ.π. Στις δικές μου επιλογές έχω ορίσει ότι η εγκατάσταση θα γίνει στον φάκελο /opt/php55.
Όταν ολοκληρωθεί η διαδικασία, υποθέτοντας ότι όλα πήγαν καλά, δίνουμε:
# make
και μετά
# make install
Αν πάλι όλα πάνε καλά, έχουμε εγκαταστήσει τη νέα έκδοση της php στον κατάλογο /opt/php55.
Τώρα πρέπει να ρυθμίσουμε το αρχείο php.ini για αυτή την έκδοση. Ένα γρήγορο configuration είναι αυτό:
# cp php.ini-production /opt/php55/lib/php.ini
που αντιγράφει τις default ρυθμίσεις. Αν θέλουμε επιπλέον αλλαγές, μπορούμε να τις κάνουμε πειράζοντας αυτό το αρχείο:
# vi /opt/php55/lib/php.ini
Επόμενο βήμα είναι να ορίσουμε την php 5.5. σαν handler στο suPHP και στον apache. Δίνουμε:
# vi /opt/suphp/etc/suphp.conf
Προς το τέλος θα δείτε κάτι σαν:
application/x-httpd-php5="php:/usr/bin/php"
Ακριβώς κάτω από αυτό προσθέτουμε:
application/x-httpd-php55="php:/opt/php55/bin/php-cgi"
Αποθηκεύουμε, και πηγαίνουμε να επεξεργαστούμε και το configuration του apache
# vi /etc/httpd/conf/php.conf
Πάλι, κάπου προς το τέλος θα βρούμε κάτι σαν: suPHP_AddHandler application/x-httpd-php5. Κάτω από αυτό, προσθέτουμε το:
suPHP_AddHandler application/x-httpd-php55
Κάνουμε και ένα restart στον apache και είμαστε έτοιμοι (στο centos δίνουμε # service httpd restart).
Τώρα, σε όποιο site θέλουμε να τρέξουμε τη νέα έκδοση της php, κάνουμε μια επεξεργασία στο .htaccess και προσθέτουμε πάνω – πάνω αυτή τη γραμμή:
AddHandler application/x-httpd-php55 .php
και πλέον το site θα τρέχει με τη νέα έκδοση της php.
Το επόμενο βήμα είναι βασικά να κάνουμε το αντίστροφο, η default έκδοση να είναι η 5.5 και κάποια site να μπορούν προαιρετικά να γυρίσουν στην 5.2, αλλά νομίζω ότι αυτό ήταν αρκετό για σήμερα 😀