summary refs log tree commit diff
path: root/doc/languages-frameworks/php.section.md
blob: 18d4ee83709daadb9ac8ed6d5286e25831538f35 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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](https://www.php.net/supported-versions.php).

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:

```nix
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.

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