Home > Article > Backend Development > Set up multiple versions of PHP to coexist in Linux system and use it with Nginx server, _PHP tutorial
Application environment
In the LNMP environment, the current PHP version is 5.3.8. When I encounter an application requirement that only supports PHP 5.2.x, I want to keep the existing application or use PHP 5.3.8. In other words, two versions of PHP need to exist at the same time for nginx to call different versions as needed.
Thoughts
Nginx interacts with PHP through PHP-FastCGI. After PHP-FastCGI is run, it will listen through files or local ports. Configuring the corresponding FastCGI listening port or file in Nginx will allow Nginx to request the interpretation of PHP.
Since PHP-FastCGI listens to ports and files, different versions of PHP-FastCGI can be run at the same time and listen to different ports or files. Nginx can be configured to call different PHP-FastCGI ports or files according to requirements, that is Different versions of PHP can coexist.
Configuration record
The simple configuration process is recorded below, based on the Debian environment where lnmp has been installed. The current version of PHP is 5.3.8, located in /usr/local/php.
1. Download PHP-5.2.14 and related FPM and autoconf components:
mkdir ~/php5.2 cd ~/php5.2 wget -c http://museum.php.net/php5/php-5.2.14.tar.gz wget -c http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz
2. Unzip PHP-5.2.14 and apply PHP-FPM patch:
tar zxvf php-5.2.14.tar.gz gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1
3. If you have installed through lnmp, autoconf should have been installed. If not, please download and compile autoconf-2.13 yourself, and then set the autoconf environment variable:
export PHP_AUTOCONF=/usr/local/autoconf-2.13/bin/autoconf¬ export PHP_AUTOHEADER=/usr/local/autoconf-2.13/bin/autoheader
3. Compile and install PHP-5.2.14 in the new path (/usr/local/php-5.2.14), pay attention to the paths of –prefix and –with-config-file-path, and open fastcgi and fpm Options:
cd php-5.2.14/ ./buildconf --force ./configure --prefix=/usr/local/php-5.2.14 --with-config-file-path=/usr/local/php-5.2.14/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-fastcgi --enable-fpm make ZEND_EXTRA_LIBS='-liconv' make install
4. Set /usr/local/php-5.2.14/etc/php-fpm.conf, listening port:
<value name="listen_address">127.0.0.1:9001</value>
or monitor file:
<value name="listen_address">/path/to/unix/socket</value>
Other parameters can be customized according to the server environment and needs.
5. Start php-fpm, which can be managed through php-fpm in the future:
/usr/local/php-5.2.14/sbin/php-fpm start
After php5.3.3, php has inherited php-fpm into php, and the built-in php-fpm does not support the (start|stop|reload) smooth startup parameters by default. You need to use the startup provided in the official source code. Script to control:
cp -f (php -5.3.x-source-dir)/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod 755 /etc/init.d/php-fpm /etc/init.d/php-fpm start
Operations supported by php-fpm:
Operations supported by the php-fpm script of 5.3.3: start|stop|force-quit|restart|reload|status
6. Configure the php.ini of PHP-5.2.14 and reload it to take effect:
vi /usr/local/php-5.2.14/etc/php.ini
/usr/local/php-5.2.14/sbin/php-fpm reload
7. Modify the nginx configuration and use PHP-5.2.14 for the required service configuration:
location ~ .*.(php|php5)?$ { fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; include fcgi.conf; }8. Record the configuration you used to compile php5.5.10
./configure --prefix=/usr/local/php-5.5.10 --with-config-file-path=/usr/local/php-5.5.10/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-bz2 --with-curl=/usr/bin --enable-ftp --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --with-iconv-dir=/usr/local --enable-mbstring --enable-calendar --with-gettext --with-libxml-dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --enable-dom --enable-xml --enable-fpm --with-libdir=lib64 --with-mcrypt=/usr/bin --enable-zip --enable-soap --enable-mbstring --with-gd --with-openssl --enable-pcntl --with-xmlrpc --enable-opcache