Installing and Setting PHP for Apache

PHP is a server-side programming language. Client-side programming languages, like JavaScript, are handled by the browser, but the PHP software must be installed on the server and made to work with the Apache httpd server.

In order for Apache and PHP to work together, we therefore need to install PHP. Then we'll make some modifications to Apache so that it defaults to PHP files rather than to HTML files.

To get started, let's work with last week's HTTP machine that we used to set up Apache and user directories userdir. You can use that machine or you can clone it to be sure that you have a good backup in case you need to start over.

Let's find the relevant packages to install. Again, make sure your system is up to date first.

sudo su
dnf -y upgrade
dnf search php | less
dnf info php
dnf info php-common
dnf install php php-common

Since we are altering how the Apache httpd service functions, we need to restart the service. To check and restart services:

systemctl status httpd.service
systemctl restart httpd.service
systemctl status httpd.service

If all is well, our next task is to see if the Apache httpd service recognizes PHP. We will proceed to the base HTTP directory, and use nano to create and open a file called info.php.

cd /var/www/html/
nano info.php

To make sure that the Apache web server can recognize that PHP is installed and usable, we can add test code to the info.php file. The test code will give us information about the version of PHP that we just installed:

<?php
phpinfo();
?>

Next, update file ownership for all files in this directory. They should be owned be the Apache user:

ls -l
chown apache:apache *
ls -l
w3m http://localhost/info.php

By default, if both an index.html file and an index.php file exist in the same directory, the Apache web server will display the index.html file if a user visits the directory (e.g., http://example.com/ or http://localhost/). So we need to configure Apache to display index.php files before displaying index.html files in case both files exist in the same directory:

cd /etc/httpd/conf/
nano httpd.conf

Change this line:

DirectoryIndex index.html

To (that is, add index.php file to the line and make sure that it comes before index.html. It should look like:

DirectoryIndex index.php index.html

Since we have modified an Apache configuration file, we should check that we haven't made a syntax mistake:

apachectl configtest

If we get an Syntax Ok message (you can ignore the FQDN error message), you can tell Apache to reload its config files:

systemctl reload httpd.service
systemctl restart httpd.service

Now create a basic PHP page. cd back to the base HTTP directory and use nano to create and open and index.php file:

cd /var/www/html/
nano index.php

Add some HTML and PHP that will detect our browser to the index.php (Source code link):

<p>You are using the following browser to view this site:</p>

<?php
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

$browser = get_browser(null, true);
print_r($browser);
?>

Next, save and exit nano, change ownership of the file to Apache, and view with w3m:

chown apache:apache index.php
w3m http://localhost/

Of course, since we set up our hostname last week, we can use our hostname in our URL:

w3m http://enterprise/

Your goal:

  • Create an index.php file in your userdir
  • Add some PHP and submit screenshots, like last week, showing both the code and the output.

Test some sample PHP code from here: https://www.w3schools.com/php/php_syntax.asp