In this post we will discuss how to use multiple PHP versions. Sometimes we have encountered cases where we have to work on different apps projects with different technologies and PHP versions. For example, we want to run the Laravel 11 PHP8 and CodeIgniter 4 PHP7 projects, both of which run different versions of PHP. Actually, there is a simpler way, namely by using a Docker container, but we will discuss it in the next post. For now, we will discuss how to install, configure and run multiple PHP on the host.
Okay, first we need to setup our webserver using Apache2 and setup the PHP that we will use.
apt install apache2
We will install from the PPA repository, so we need to add the repository first
apt-get install software-properties-common -y
This is useful so you can run the add-apt-repository command. Next, add the repository with the following command
add-apt-repository ppa:ondrej/php
apt update -y
We install PHP version 7.2
apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 libapache2-mod-fcgid -y
Then we install PHP version 8, because my vps is Ubuntu 24.04 so the default is PHP 8.3. To install it without specifying the version as follows.
apt-get install php php-fpm php-mysql libapache2-mod-php libapache2-mod-fcgid -y
Run php-fpm
systemctl start php7.2-fpm
systemctl start php8.3-fpm
Then activate the following modules so you can use multiple PHP versions
a2enmod actions fcgid alias proxy_fcgi
Then restart the apache service to apply all changes.
systemctl restart apache2
Okay, let's continue to setup virtualhost on the web server.
mkdir /var/www/app1 mkdir /var/www/app2
Also set the permissions and owner
chown -R www-data:www-data /var/www/app1 chown -R www-data:www-data /var/www/app2 chmod -R 775 /var/www/app1 chmod -R 775 /var/www/app2
Continue configuring site-available on apache2, we create the config file first.
Because we don't have a domain, we will distinguish between vhosts and ports. Port 80 running php7.2 and port 90 running php8.3
nano /etc/apache2/sites-available/app1.conf
then paste the following config
+<VirtualHost *:80> + ServerAdmin app1 + ServerName app1.com + DocumentRoot /var/www/app1 + DirectoryIndex info.php + <Directory /var/www/app1> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <FilesMatch \.php$> # From the Apache version 2.4.10 and above, use the SetHandler to run PHP as a fastCGI process server + SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined </VirtualHost>
Create another config file for PHP version 8
nano /etc/apache2/sites-available/server2.conf
Also paste the config
+<VirtualHost *:90> + ServerAdmin site2 + ServerName site2.com + DocumentRoot /var/www/app2 + DirectoryIndex info.php + <Directory /var/www/app2> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <FilesMatch \.php$> # From the Apache version 2.4.10 and above, use the SetHandler to run PHP as a fastCGI process server + SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined </VirtualHost>
In the green section there are several configuration lines that need to be changed according to our conditions and needs
Then test whether the config is wrong or not, make sure the syntax is ok so you can proceed to the next stage
apachectl configtest
Next we activate the virtualhost configuration
a2ensite app1.conf a2ensite app2.conf
Don't forget to disable the default config
a2dissite 000-default.conf
Because we use a different port on the virtualhost, we need to register it first.
nano /etc/apache2/ports.conf
Add to the row I colored green
apt install apache2
If everything has been done, we just need to restart the server and do a test
apt-get install software-properties-common -y
Do a test by accessing the IP address and port. I suggest creating an info.php file that contains the function phpinfo(); in each document root.
please access http://ip-server:port for testing
Hopefully this is useful and good luck trying
The above is the detailed content of Using Multiple PHP Version on Linux. For more information, please follow other related articles on the PHP Chinese website!