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
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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

The enumeration function in PHP8.1 enhances the clarity and type safety of the code by defining named constants. 1) Enumerations can be integers, strings or objects, improving code readability and type safety. 2) Enumeration is based on class and supports object-oriented features such as traversal and reflection. 3) Enumeration can be used for comparison and assignment to ensure type safety. 4) Enumeration supports adding methods to implement complex logic. 5) Strict type checking and error handling can avoid common errors. 6) Enumeration reduces magic value and improves maintainability, but pay attention to performance optimization.

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

RESTAPI design principles include resource definition, URI design, HTTP method usage, status code usage, version control, and HATEOAS. 1. Resources should be represented by nouns and maintained at a hierarchy. 2. HTTP methods should conform to their semantics, such as GET is used to obtain resources. 3. The status code should be used correctly, such as 404 means that the resource does not exist. 4. Version control can be implemented through URI or header. 5. HATEOAS boots client operations through links in response.

In PHP, exception handling is achieved through the try, catch, finally, and throw keywords. 1) The try block surrounds the code that may throw exceptions; 2) The catch block handles exceptions; 3) Finally block ensures that the code is always executed; 4) throw is used to manually throw exceptions. These mechanisms help improve the robustness and maintainability of your code.

The main function of anonymous classes in PHP is to create one-time objects. 1. Anonymous classes allow classes without names to be directly defined in the code, which is suitable for temporary requirements. 2. They can inherit classes or implement interfaces to increase flexibility. 3. Pay attention to performance and code readability when using it, and avoid repeatedly defining the same anonymous classes.
