/php-builder

:elephant: Build PHP 5.6 and newer

Primary LanguageShellMIT LicenseMIT

PHP Builder

Build status LICENSE PHP Versions Supported

  • This projects builds PHP 5.6 and above (including a nightly build from the master branch of PHP) on Ubuntu and Debian.
  • To install PHP, follow the instructions in the install section.
  • To download a PHP build, refer to the builds section.

Contents

OS Support

  • Ubuntu 20.04 (Focal) amd64
  • Ubuntu 22.04 (Jammy) amd64
  • Ubuntu 24.04 (Noble) amd64
  • Debian 11 (Bullseye) amd64
  • Debian 12 (Bookworm) amd64

All other distributions based on the above operating systems will also be supported on best effort basis.

Install

  • Fetch the installer:
curl -sSLO https://github.com/shivammathur/php-builder/releases/latest/download/install.sh
chmod a+x ./install.sh

The installer takes the following options:

./install.sh <php-version> <release|debug> <nts|zts>

The php-version is required, and release and nts are the defaults.

  • release: No debugging symbols
  • debug: With debugging symbols
  • nts: Non Thread Safe
  • zts: Thread Safe

Examples

  • To install PHP 8.4 without debugging symbols and non thread safe:
./install.sh 8.4
  • or, to install PHP 8.4 with debugging symbols and thread safe:
./install.sh 8.4 debug zts
  • Finally, test your PHP version:
php -v

Notes:

  • All PHP versions have the prefix /usr and the directory structure will be same as that of the official Debian builds.
  • Any pre-existing extensions INI configuration for the PHP version will be removed upon installation.
  • The installer will switch to the PHP version you installed.

Extensions

  • Expand to check the extensions installed along with PHP.

    amqp, apcu, ast, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, ds, enchant, exif, FFI, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imagick, imap, intl, json, ldap, libxml, mbstring, memcache, memcached, mongodb, msgpack, mysqli, mysqlnd, odbc, openssl, pcntl, pcov, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite, pdo_sqlsrv, pgsql, Phar, posix, pspell, readline, redis, Reflection, session, shmop, SimpleXML, soap, sockets, sodium, SPL, sqlite3, sqlsrv, standard, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, xdebug, xml, xmlreader, xmlwriter, xsl, zip, zlib, Xdebug, Zend OPcache

  • Extension PCOV is disabled by default as Xdebug is enabled.

  • You can switch to PCOV by disabling Xdebug using phpdismod and enabling it using phpenmod.

phpdismod -v <ALL|php-version> -s <ALL|sapi-name> xdebug
phpenmod -v <ALL|php-version> -s <ALL|sapi-name> pcov
  • More extensions can also be installed from ppa:ondrej/php

  • PECL is also installed along with PHP, so compatible extensions can also be installed using it. These will be enabled using the pecl.ini module which is linked to all SAPIs.

pecl install <extension>

JIT

PHP 8.0 and above versions have a JIT(Just-In-Time) compiler.

It is disabled by default, and can be enabled by the following steps:

  • First, disable Xdebug and PCOV as they are not compatible with JIT.
phpdismod -v <ALL|php-version> -s <ALL|sapi-name> xdebug pcov
  • Then enable JIT using the switch_jit script for the same PHP versions and SAPIs.
switch_jit -v <ALL|php-version> -s <ALL|sapi-name> enable -m <jit_mode> -b <jit_buffer_size>

If you do not specify -m or -b, the default for JIT mode is tracing, and for JIT buffer size it is 128M.

  • If you get a warning about incompatible extensions, check if you installed any other third-party extensions which are incompatible with JIT.

To disable JIT:

switch_jit -v <php-version> -s <ALL|sapi-name> disable

SAPI support

These SAPIs are installed by default:

  • apache2-handler
  • cli
  • cgi
  • embed
  • fpm
  • phpdbg

These SAPI:server configurations can be set up with the switch_sapi script:

  • apache:apache (apache2-handler with Apache)
  • fpm:apache (php-fpm with Apache)
  • cgi:apache (php-cgi with Apache)
  • fpm:nginx (php-fpm with Nginx)
switch_sapi -v <php-version> -s <sapi|sapi:server>

Note: When you run switch_sapi, the servers will have the default document root /var/www/html.

Builds

The following releases have nts and zts builds for the following PHP versions along with builds with and without debugging symbols.

Uninstall

  • Fetch the installer:
curl -sSLO https://github.com/shivammathur/php-builder/releases/latest/download/install.sh
chmod a+x ./install.sh
  • Then, to remove PHP 8.4:
./install.sh --remove 8.4

or, to remove PHP 8.3:

./install.sh --remove 8.3

Related Projects

License

The scripts and documentation in this project are under the MIT license. This project has multiple dependencies. Their licenses can be found in their respective repositories.

Dependencies