Apache – PHP Scripting Language (8.3.X Branch)
Last Updated on 2025-02-03 21:58 by Sture
Description:
PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open-source general-purpose scripting language that is especially suited for web development and can be embedded into HTML.
WWW: http://www.php.net.
Requirements
The following application(s) must be installed, configured, and running before PHP is installed:
Installation
N.B.: The current version of Apache will be installed if missing!
Search for mod_php in the remote package repositories with:
user@freebsdsrv:~ $ pkg search mod_php | egrep '^mod_php[0-9]+-[0-9]' [enter]
mod_php81-8.1.31 PHP Scripting Language (8.1.X branch)
mod_php82-8.2.27 PHP Scripting Language (8.2.X branch)
mod_php83-8.3.15 PHP Scripting Language (8.3.X branch)
mod_php84-8.4.2 PHP Scripting Language (8.4.X branch)
user@freebsdsrv:~ $
If PHP based services is required to send email via phpmailer we are for det moment limited to use the 8.3.x branch of PHP.
In this example php83, php83-extensions and mod_php83 will installed due to that phpmailer6 will be required later on to be installed.
user@freebsdsrv:~ $ sudo pkg install -y php83 php83-extensions mod_php83 [enter]
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 22 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
libargon2: 20190702_1
libedit: 3.1.20240808,1
mod_php83: 8.3.15
php83: 8.3.15
php83-ctype: 8.3.15
php83-dom: 8.3.15
php83-extensions: 1.0
php83-filter: 8.3.15
php83-iconv: 8.3.15
php83-opcache: 8.3.15
php83-pdo: 8.3.15
php83-pdo_sqlite: 8.3.15
php83-phar: 8.3.15
php83-posix: 8.3.15
php83-session: 8.3.15
php83-simplexml: 8.3.15
php83-sqlite3: 8.3.15
php83-tokenizer: 8.3.15
php83-xml: 8.3.15
php83-xmlreader: 8.3.15
php83-xmlwriter: 8.3.15
sqlite3: 3.46.1,1
Number of packages to be installed: 22
The process will require 40 MiB more space.
9 MiB to be downloaded.
[1/22] Fetching php83-session-8.3.15.pkg: 100% 41 KiB 41.9kB/s 00:01
[2/22] Fetching libedit-3.1.20240808,1.pkg: 100% 150 KiB 153.8kB/s 00:01
[3/22] Fetching php83-filter-8.3.15.pkg: 100% 25 KiB 25.7kB/s 00:01
[4/22] Fetching php83-pdo_sqlite-8.3.15.pkg: 100% 15 KiB 15.5kB/s 00:01
[5/22] Fetching php83-ctype-8.3.15.pkg: 100% 8 KiB 7.8kB/s 00:01
[6/22] Fetching php83-tokenizer-8.3.15.pkg: 100% 16 KiB 16.0kB/s 00:01
[7/22] Fetching php83-8.3.15.pkg: 100% 5 MiB 4.7MB/s 00:01
[8/22] Fetching mod_php83-8.3.15.pkg: 100% 2 MiB 1.8MB/s 00:01
[9/22] Fetching php83-xmlwriter-8.3.15.pkg: 100% 16 KiB 16.8kB/s 00:01
[10/22] Fetching php83-xml-8.3.15.pkg: 100% 23 KiB 23.9kB/s 00:01
[11/22] Fetching php83-iconv-8.3.15.pkg: 100% 20 KiB 20.8kB/s 00:01
[12/22] Fetching php83-dom-8.3.15.pkg: 100% 79 KiB 81.1kB/s 00:01
[13/22] Fetching sqlite3-3.46.1,1.pkg: 100% 1 MiB 1.5MB/s 00:01
[14/22] Fetching php83-simplexml-8.3.15.pkg: 100% 25 KiB 26.1kB/s 00:01
[15/22] Fetching php83-pdo-8.3.15.pkg: 100% 55 KiB 56.6kB/s 00:01
[16/22] Fetching php83-extensions-1.0.pkg: 100% 1 KiB 1.5kB/s 00:01
[17/22] Fetching php83-phar-8.3.15.pkg: 100% 115 KiB 117.8kB/s 00:01
[18/22] Fetching libargon2-20190702_1.pkg: 100% 69 KiB 70.2kB/s 00:01
[19/22] Fetching php83-opcache-8.3.15.pkg: 100% 344 KiB 352.1kB/s 00:01
[20/22] Fetching php83-posix-8.3.15.pkg: 100% 17 KiB 17.4kB/s 00:01
[21/22] Fetching php83-xmlreader-8.3.15.pkg: 100% 18 KiB 18.1kB/s 00:01
[22/22] Fetching php83-sqlite3-8.3.15.pkg: 100% 28 KiB 28.7kB/s 00:01
Checking integrity... done (0 conflicting)
[1/22] Installing libargon2-20190702_1...
[1/22] Extracting libargon2-20190702_1: 100%
[2/22] Installing libedit-3.1.20240808,1...
[2/22] Extracting libedit-3.1.20240808,1: 100%
[3/22] Installing php83-8.3.15...
[3/22] Extracting php83-8.3.15: 100%
[4/22] Installing php83-dom-8.3.15...
[4/22] Extracting php83-dom-8.3.15: 100%
[5/22] Installing sqlite3-3.46.1,1...
[5/22] Extracting sqlite3-3.46.1,1: 100%
[6/22] Installing php83-pdo-8.3.15...
[6/22] Extracting php83-pdo-8.3.15: 100%
[7/22] Installing php83-session-8.3.15...
[7/22] Extracting php83-session-8.3.15: 100%
[8/22] Installing php83-filter-8.3.15...
[8/22] Extracting php83-filter-8.3.15: 100%
[9/22] Installing php83-pdo_sqlite-8.3.15...
[9/22] Extracting php83-pdo_sqlite-8.3.15: 100%
[10/22] Installing php83-ctype-8.3.15...
[10/22] Extracting php83-ctype-8.3.15: 100%
[11/22] Installing php83-tokenizer-8.3.15...
[11/22] Extracting php83-tokenizer-8.3.15: 100%
[12/22] Installing php83-xmlwriter-8.3.15...
[12/22] Extracting php83-xmlwriter-8.3.15: 100%
[13/22] Installing php83-xml-8.3.15...
[13/22] Extracting php83-xml-8.3.15: 100%
[14/22] Installing php83-iconv-8.3.15...
[14/22] Extracting php83-iconv-8.3.15: 100%
[15/22] Installing php83-simplexml-8.3.15...
[15/22] Extracting php83-simplexml-8.3.15: 100%
[16/22] Installing php83-phar-8.3.15...
[16/22] Extracting php83-phar-8.3.15: 100%
[17/22] Installing php83-opcache-8.3.15...
[17/22] Extracting php83-opcache-8.3.15: 100%
[18/22] Installing php83-posix-8.3.15...
[18/22] Extracting php83-posix-8.3.15: 100%
[19/22] Installing php83-xmlreader-8.3.15...
[19/22] Extracting php83-xmlreader-8.3.15: 100%
[20/22] Installing php83-sqlite3-8.3.15...
[20/22] Extracting php83-sqlite3-8.3.15: 100%
[21/22] Installing mod_php83-8.3.15...
[21/22] Extracting mod_php83-8.3.15: 100%
[activating module `php' in /usr/local/etc/apache24/httpd.conf]
[22/22] Installing php83-extensions-1.0...
[22/22] Extracting php83-extensions-1.0: 100%
=====
Message from php83-dom-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-dom.ini.sample
=====
Message from php83-pdo-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-pdo.ini.sample
=====
Message from php83-session-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-18-session.ini.sample
=====
Message from php83-filter-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-filter.ini.sample
=====
Message from php83-pdo_sqlite-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-30-pdo_sqlite.ini.sample
=====
Message from php83-ctype-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-ctype.ini.sample
=====
Message from php83-tokenizer-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-tokenizer.ini.sample
=====
Message from php83-xmlwriter-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-xmlwriter.ini.sample
=====
Message from php83-xml-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-xml.ini.sample
=====
Message from php83-iconv-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-iconv.ini.sample
=====
Message from php83-simplexml-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-simplexml.ini.sample
=====
Message from php83-phar-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-phar.ini.sample
=====
Message from php83-opcache-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-10-opcache.ini.sample
=====
Message from php83-posix-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-posix.ini.sample
=====
Message from php83-xmlreader-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-30-xmlreader.ini.sample
=====
Message from php83-sqlite3-8.3.15:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-sqlite3.ini.sample
=====
Message from mod_php83-8.3.15:
--
******************************************************************************
Consider switching to php-fpm and mod_fast_cgi as per Apache httpd project
recommendation. See https://cwiki.apache.org/confluence/display/HTTPD/PHP-FPM
******************************************************************************
If you are building PHP-based ports in poudriere(8) or Synth with ZTS enabled,
add WITH_MPM=event to /etc/make.conf to prevent build failures.
******************************************************************************
Make sure index.php is part of your DirectoryIndex.
You should add the following to your Apache configuration file:
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
******************************************************************************
user@freebsdsrv:~ $
View the installed PHP version on your server.
user@freebsdsrv:~ $ php -v [enter]
PHP 8.3.15 (cli) (built: Jan 30 2025 02:19:13) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.15, Copyright (c) Zend Technologies
with Zend OPcache v8.3.15, Copyright (c), by Zend Technologies
user@freebsdsrv:~ $
List installed PHP compiled in modules with:
user@freebsdsrv:~ $ php -m [enter]
[PHP Modules]
Core
ctype
date
dom
filter
hash
iconv
json
libxml
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
random
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
Zend OPcache
[Zend Modules]
Zend OPcache
user@freebsdsrv:~ $
Configuration
Configure PHP to use production settings with this command:
user@freebsdsrv:~ $ sudo cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini; ls -l /usr/local/etc/php.* [enter]
-rw-r--r-- 1 root wheel 123 Jan 7 03:10 /usr/local/etc/php.conf
-rw-r--r-- 1 root wheel 69048 Jan 29 12:57 /usr/local/etc/php.ini
-rw-r--r-- 1 root wheel 68914 Jan 7 03:10 /usr/local/etc/php.ini-development
-rw-r--r-- 1 root wheel 69048 Jan 7 03:10 /usr/local/etc/php.ini-production
user@freebsdsrv:~ $
…and then edit /usr/local/etc/php.ini to meet your demands with:
user@freebsdsrv:~ $ sudo ee +713 /usr/local/etc/php.ini [enter]
Increase post_max_size from 8M to 32M;
; Maximum size of POST data that PHP will accept.
; http://php.net/post-max-size
post_max_size = 32M
Scroll down to line 989 and set date.timezone as in this example:
[Date]
; Defines the default timezone used by the date functions
; https://php.net/date.timezone
date.timezone = Europe/Stockholm
Configure a handler for PHP pages with:
user@freebsdsrv:~ $ sudo ee /usr/local/etc/apache24/Includes/php.conf [enter]
<IfModule dir_module>
DirectoryIndex index.php index.html
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
</IfModule>
Verify configuration by creating file:
user@freebsdsrv:~ $ sudo ee /usr/local/www/apache24/data/index.php [enter]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Simple HTML Page with PHP</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is a simple HTML page generated using PHP.</p>
<?php
// You can include PHP code within the HTML content
$name = "Admin User";
echo "<p>Welcome, $name!</p>";
?>
</body>
</html>
Restart Apache with:
user@freebsdsrv:~ $ sudo service apache24 restart [enter]
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 1732.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.
user@freebsdsrv:~ $
Test the PHP installation
Point your browser to: https://192.168.1.50/index.php
—-
Hello, World!
This is a simple HTML page generated using PHP.
Welcome, Admin User!
—-
Create a PHP Information display file with:
user@freebsdsrv:~ $ sudo sh -c 'echo "<?php phpinfo(); ?>" > /usr/local/www/apache24/data/info.php'; cat /usr/local/www/apache24/data/info.php [enter]
…then point your browser to https://192.168.1.50/info.php.
Information about the PHP installation on the FreeBSD server will be displayed.