nixpkgs/doc/languages-frameworks/php.section.md
Elis Hirwing a2099156ec
php: split php.packages to php.packages and php.extensions
So now we have only packages for human interaction in php.packages and
only extensions in php.extensions. With this php.packages.exts have
been merged into the same attribute set as all the other extensions to
make it flat and nice.

The nextcloud module have been updated to reflect this change as well
as the documentation.
2020-04-05 16:45:17 +02:00

2.2 KiB

PHP

User Guide

Using PHP

Overview

Several versions of PHP are available on Nix, each of which having a wide variety of extensions and libraries available.

The attribute php refers to the version of PHP considered most stable and thoroughly tested in nixpkgs for any given release of NixOS. Note that while this version of PHP may not be the latest major release from upstream, any version of PHP supported in nixpkgs may be utilized by specifying the desired attribute by version, such as php74.

Only versions of PHP that are supported by upstream for the entirety of a given NixOS release will be included in that release of NixOS. See PHP Supported Versions.

For packages we have php.packages that contains packages related for human interaction, notable example is php.packages.composer.

For extensions we have php.extensions that contains most upstream extensions as separate attributes as well some additional extensions that tend to be popular, notable example is: php.extensions.imagick.

The different versions of PHP that nixpkgs fetch is located under attributes named based on major and minor version number; e.g., php74 is PHP 7.4 with commonly used extensions installed, php74base is the same PHP runtime without extensions.

Installing PHP with packages

There's two majorly different parts of the PHP ecosystem in NixOS:

  • Command line utilities for human interaction. These comes from the php.packages.* attributes.
  • PHP environments with different extensions enabled. These are composed with php.buildEnv using an additional configuration file.
Example setup for phpfpm

Example to build a PHP with the extensions imagick and opcache enabled. Then to configure it for the "foo" phpfpm pool:

let
  myPhp = php.buildEnv { exts = pp: with pp; [ imagick opcache ]; };
in {
  services.phpfpm.pools."foo".phpPackage = myPhp;
};
Example usage with nix-shell

This brings up a temporary environment that contains a PHP interpreter with the extensions imagick and opcache enabled.

nix-shell -p 'php.buildEnv { exts = pp: with pp; [ imagick opcache ]; }'