PHP is the PHP Hypertext Preprocessor. Primarily used in dynamic web sites, it allows for programming code to be directly embedded into the HTML markup. It is also useful as a general purpose scripting language.
Development versions of BLFS may not build or run some packages properly if LFS or dependencies have been updated since the most recent stable versions of the books.
Download (HTTP): https://www.php.net/distributions/php-8.3.0.tar.xz
Download MD5 sum: c94426720f6dd2124a25db9fc86c0bfe
Download size: 12 MB
Estimated disk space required: 525 MB (with documentation)
Estimated build time: 1.6 SBU (with parallelism=4; add 1.7 SBU for tests)
Optional pre-built documentation (single file html): https://www.php.net/distributions/manual/php_manual_en.html.gz
Optional pre-built documentation (chunked html): https://www.php.net/distributions/manual/php_manual_en.tar.gz. Note that the documentation can be found in languages other than English at https://www.php.net/download-docs.php
Apache-2.4.58 and libxml2-2.12.1
Aspell-0.60.8, enchant-2.6.2, libxslt-1.1.39, an MTA (that provides a sendmail command), pcre2-10.42, Pth-2.0.7, AppArmor, Dmalloc, Net-SNMP, oniguruma, OSSP mm, re2c, and XMLRPC-EPI
FreeType-2.13.2, libexif-0.6.24, libjpeg-turbo-3.0.1, libpng-1.6.40, libtiff-4.6.0, libwebp-1.3.2, a graphical environment, FDF Toolkit, GD, and t1lib
cURL-8.4.0, tidy-html5-5.8.0, Caudium, Hyperwave, Roxen WebServer, and WDDX
libiodbc-3.52.15, lmdb-0.9.31, MariaDB-10.11.5 or MySQL, OpenLDAP-2.6.6, PostgreSQL-16.1, SQLite-3.44.2, unixODBC-2.3.12, Berkeley DB (deprecated) Adabas, Birdstep, cdb, DBMaker, Empress, FrontBase, IBM DB2, Mini SQL, Monetra, and QDBM
PHP also provides support for many commercial database tools such as Oracle, SAP and ODBC Router.
Cyrus SASL-2.1.28, MIT Kerberos V5-1.21.2, libmcrypt, and mhash
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/php
You can use PHP for server-side scripting, command-line scripting or client-side GUI applications. This book provides instructions for setting up PHP for server-side scripting as it is the most common form.
PHP has many more configure options that will enable support for various things. You can use ./configure --help to see a full list of the available options. Also, use of the PHP web site is highly recommended, as their online docs are very good. An example of a configure command that utilizes many of the most common dependencies can be found at https://anduin.linuxfromscratch.org/BLFS/files/php_configure.txt.
If, for whatever reason, you don't have libxml2-2.12.1
installed, you need to add --disable-libxml
to the
configure command in the instructions below. Note
that this will prevent the pear command from being
built.
Install PHP by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --datadir=/usr/share/php \ --mandir=/usr/share/man \ --enable-fpm \ --without-pear \ --with-fpm-user=apache \ --with-fpm-group=apache \ --with-fpm-systemd \ --with-config-file-path=/etc \ --with-zlib \ --enable-bcmath \ --with-bz2 \ --enable-calendar \ --enable-dba=shared \ --with-gdbm \ --with-gmp \ --enable-ftp \ --with-gettext \ --enable-mbstring \ --disable-mbregex \ --with-readline && make
To test the results, issue: make test. Several tests (out of over 18000) may fail, in which case you are asked whether you want to send the report to the PHP developers. If you want to automate the test, you may prefix the command with yes "n" | .
Now, as the root
user:
make install && install -v -m644 php.ini-production /etc/php.ini && install -v -m755 -d /usr/share/doc/php-8.3.0 && install -v -m644 CODING_STANDARDS* EXTENSIONS NEWS README* UPGRADING* \ /usr/share/doc/php-8.3.0
The default configuration files for the fastCGI process manager are
installed only if they do not already exist on the system. If this is
the first installation, they should be renamed, as the
root
user:
if [ -f /etc/php-fpm.conf.default ]; then mv -v /etc/php-fpm.conf{.default,} && mv -v /etc/php-fpm.d/www.conf{.default,} fi
The pre-built HTML documentation is packaged in two forms: a tarball
containing many individual files, useful for quick loading into your
browser, and one large individual file, which is useful for using the
search utility of your browser. If you downloaded either, or both, of the
documentation files, issue the following commands as the
root
user to install them (note
these instructions assume English docs, modify the tarball names below if
necessary).
For the “Single HTML” file:
install -v -m644 ../php_manual_en.html.gz \ /usr/share/doc/php-8.3.0 && gunzip -v /usr/share/doc/php-8.3.0/php_manual_en.html.gz
For the “Many HTML files” tarball:
tar -xvf ../php_manual_en.tar.gz \ -C /usr/share/doc/php-8.3.0 --no-same-owner
The bundled pear is not installed because of a bug which might pollute the filesystem with several hidden files and directories. If pear is needed, execute the following commands to install it:
wget https://pear.php.net/go-pear.phar php ./go-pear.phar
--datadir=/usr/share/php
: This works
around a bug in the build machinery, which installs some data to a
wrong location.
--enable-fpm
: This parameter allows
building the fastCGI Process Manager.
--with-fpm-systemd
: This parameter allows
the FastCGI Process Manager to integrate with systemd.
--without-pear
: This switch disables
installation of bundled pear software.
--with-config-file-path=/etc
: This parameter
makes PHP look for the
php.ini
configuration file in
/etc
.
--with-zlib
: This parameter adds
support for Zlib compression.
--enable-bcmath
: Enables
bc style precision math functions.
--with-bz2
: Adds support for
Bzip2 compression functions.
--enable-calendar
: This parameter
provides support for calendar conversion.
--enable-dba=shared
: This parameter enables
support for database (dbm-style) abstraction layer functions.
--enable-ftp
: This parameter
enables FTP functions.
--with-gettext
: Enables functions
that use Gettext text translation.
--enable-mbstring
: This parameter
enables multibyte string support.
--with-readline
: This parameter
enables command line Readline support.
--disable-libxml
: This option
allows building PHP without libxml2
installed.
--with-apxs2
: Instead of building the fastCGI process
manager, it is possible to build an apache
module. This has some performance penalty for heavy loaded servers,
but may be easier to set up. This switch is incompatible with the
--enable-fpm
and
--with-fpm-...
switches.
--with-mysqli=shared
: This option includes MySQLi
support.
--with-mysql-sock=/run/mysqld/mysqld.sock
: Location of
the MySQL unix socket pointer.
--with-pdo-mysql=shared
: This option includes PDO:
MySQL support.
--with-tidy=shared
: This option includes tidy library
support.
The file used as the default /etc/php.ini
configuration file is recommended by the PHP
development team. This file modifies the default behavior of
PHP. If no /etc/php.ini
is used, all configuration settings fall to the defaults. You should
review the comments in this file and ensure the changes are acceptable
in your particular environment.
The fastCGI process manager uses the configuration file
/etc/php-fpm.conf
. The default file shipped with
PHP includes all the /etc/php-fpm.d/*.conf
in turn.
There is a shipped /etc/php-fpm.d/www.conf
file,
that contains the parameters related to the interaction with the Apache
Web server.
You may have noticed the following from the output of the make install command:
You may want to add: /usr/lib/php to your php.ini include_path
If desired, add the entry using the following command as the
root
user:
sed -i 's@php/includes"@&\ninclude_path = ".:/usr/lib/php"@' \ /etc/php.ini
To enable fastCGI support in the Apache
web server, two LoadModule directives must be added to the
httpd.conf
file. They are commented out, so just
issue the following command as
root
user:
sed -i -e '/proxy_module/s/^#//' \ -e '/proxy_fcgi_module/s/^#//' \ /etc/httpd/httpd.conf
Those modules accept various ProxyPass
directives. One possibility is (as the
root
user):
echo \ 'ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/srv/www/$1' >> \ /etc/httpd/httpd.conf
Additionally, it may be useful to add an entry for
index.php
to the DirectoryIndex directive of the
httpd.conf
file. Lastly, adding a line to set up the
.phps
extension to show
highlighted PHP source may be
desirable:
AddType application/x-httpd-php-source .phps
You'll need to restart the Apache web server
after making any modifications to the httpd.conf
file.
To start the php-fpm daemon at boot,
install the systemd unit from the blfs-systemd-units-20230816
package by running the following command as the
root
user:
make install-php-fpm