PHP

Add the Ondřej Surý PPA for PHP

sudo add-apt-repository ppa:ondrej/php
sudo apt update

Install PHP

sudo apt install php-{cli,fpm,mysql,curl,xml,mbstring,gd,zip,redis,bcmath,soap,imagick}

Check the PHP Version

php -v
PHP 8.4.7 (cli) (built: May  9 2025 06:54:31) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.7, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.7, Copyright (c), by Zend Technologies

Check the PHP-FPM

sudo systemctl status php8.4-fpm

Install Composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

php -r "unlink('composer-setup.php');"
composer --version

Setting open_basedir in .user.ini

WordPress example

sudo nano /var/www/example.com/.user.ini
open_basedir=/var/www/example.com/:/tmp/

Laravel app example

sudo nano /var/www/laravel-app.com/public/.user.ini
open_basedir=/var/www/laravel-app.com/public/:/tmp/:/var/www/laravel-app.com/

Set the immutable attribute

sudo chattr +i /var/www/example.com/.user.ini
sudo chattr -i /var/www/example.com/.user.ini

Tesing

sudo nano /var/www/example.com/test.php
<?php

$contents = file_get_contents("../another.com/README.md");
var_dump($contents);
die();

If the response is false, it works.