This page is part of a full tutorial on how to install a web werver on a virtual machine. This fourth part of the tutorial explains how to install PHP on our server. It assume virtual machine is created and Debian 11 is already installed with Apache. If not, please go to the home page and follow the guide.
Before installing PHP, update your system:
sudo apt update && sudo apt -y upgrade
PHP can easily be installed with synaptic. Run the following commands on your server terminal to install PHP:
sudo apt -y install php php-common
Check you PHP version with
student@debianwebserver:~$ php -v PHP 7.4.33 (cli) (built: Nov 8 2022 11:40:37) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies
Here is the most common PHP extensions:
php-cli: use PHP from the command line.
php-fpm: communication entre un serveur Web et PHP, basée sur le protocole FastCGI.
php-json: to manipulate JSON data
php-pdo: to handle databases
php-mysql: to handle mySQL databases
php-zip: for compression
php-gd: image maniuplation
php-mbstring: for multibyte specific string
php-curl: communicate with servers (HTTP, POST ...)
php-xml: to manipulate XML data
php-pear: reusable PHP components
php-bcmath: for mathematical calculation
php-intl: internationalisation module for PHP.
The following command install all the extensions listed previously. You can add or remove extensions according to your beeds.
sudo apt -y install php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-intl
Note that if you want to install a CMS like Wordpress or Prestashop, you will need additional extensions. Please refer to the installation recommendation for these CMS.
To make PHP working with our Apache web server, we need to install
Once installed, Apache can send requests to the PHP interpreter.
sudo apt -y install libapache2-mod-php
To check the installation, let's create a PHP file that display the PHP configuration:
echo "<?php phpinfo() ?>" > ~/www/phpinfo.php
The file should be placed in the server root directory.
In your browser, enter the IP of the server followed by
A page similar to this one should be displayed:
PHP is working, but PHP script can't write files or folder in the
The following command displays the owner and group owner of the
www folder belongs to the user
student and group
student@debianwebserver:~$ ls -l www/ total 176 -rw-r--r-- 1 student student 39 Dec 7 18:00 index.html
There are several ways to solve this problem.
I choose the change the group owner of the folder for
www-data is the group used by our Apache server.
The following command keep the current user as the owner of the folder.
But it set the group to
sudo chown -R username:www-data ~/www
-R stands for Recursive.
The group owner of the folder has changed for
student@debianwebserver:~$ ls -l www total 176 -rw-r--r-- 1 student www-data 39 Dec 7 18:00 index.html
As you can see above, the group have read permission, but not write and execute permissions.
Let's give these permissions to the group on the
sudo chmod -R g+wx ~/www/
The last problem is that new files will not hinerit from theses permissions.
Fortunaltly, you can do this with the following command where we use
s flag for this purpose.
sudo chmod -R g+s ~/www/
PHP is ready. Let's now install MariaDB (MySQL alternative).