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 php -v
:
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 dataphp-pdo
: to handle databasesphp-mysql
: to handle mySQL databases php-zip
: for compressionphp-gd
: image maniuplationphp-mbstring
: for multibyte specific stringphp-curl
: communicate with servers (HTTP, POST ...)php-xml
: to manipulate XML dataphp-pear
: reusable PHP componentsphp-bcmath
: for mathematical calculationphp-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 libapache2_mod_php
.
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 /phpinfo.php
.
A page similar to this one should be displayed:
PHP is working, but PHP script can't write files or folder in the www
folder.
The following command displays the owner and group owner of the www
folder.
The www
folder belongs to the user student
and group student
:
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
.
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 www-data
:
sudo chown -R username:www-data ~/www
-R
stands for Recursive.
The group owner of the folder has changed for www-data
:
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 www
directory:
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).