Home > Backend Development > PHP Tutorial > Using Multiple PHP Version on Linux

Using Multiple PHP Version on Linux

Barbara Streisand
Release: 2024-11-27 09:14:10
Original
423 people have browsed it

Using Multiple PHP Version on Linux

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
Copy after login
Copy after login

We will install from the PPA repository, so we need to add the repository first

apt-get install software-properties-common -y
Copy after login
Copy after login

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
Copy after login
apt update -y
Copy after login

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
Copy after login

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
Copy after login

Run php-fpm

systemctl start php7.2-fpm
Copy after login
systemctl start php8.3-fpm
Copy after login

Then activate the following modules so you can use multiple PHP versions

a2enmod actions fcgid alias proxy_fcgi
Copy after login

Then restart the apache service to apply all changes.

systemctl restart apache2
Copy after login

Okay, let's continue to setup virtualhost on the web server.

mkdir /var/www/app1
mkdir /var/www/app2
Copy after login

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
Copy after login

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
Copy after login

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>
Copy after login

Create another config file for PHP version 8

nano /etc/apache2/sites-available/server2.conf
Copy after login

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>
Copy after login

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
Copy after login

Next we activate the virtualhost configuration

a2ensite app1.conf
a2ensite app2.conf
Copy after login

Don't forget to disable the default config

a2dissite 000-default.conf
Copy after login

Because we use a different port on the virtualhost, we need to register it first.

nano /etc/apache2/ports.conf
Copy after login

Add to the row I colored green

apt install apache2
Copy after login
Copy after login

If everything has been done, we just need to restart the server and do a test

apt-get install software-properties-common -y
Copy after login
Copy after login

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!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template