@ -21,20 +21,12 @@ of a given NixOS release will be included in that release of
NixOS. See [PHP Supported
Versions](https://www.php.net/supported-versions.php).
As for packages we have `php.packages` that contains a bunch of
attributes where some are suitable as extensions (notable example:
`php.packages.imagick` ). And some are more suitable for command
line use (notable example: `php.packages.composer` ).
For packages we have `php.packages` that contains packages related
for human interaction, notable example is `php.packages.composer` .
We have a special section within `php.packages` called
`php.packages.exts` that contain certain PHP modules that may not
be part of the default PHP derivation (example:
`php.packages.exts.opcache` ).
The `php.packages.exts.*` attributes are official extensions which
originate from the mainline PHP project, while other extensions within
the `php.packages.*` attribute are of mixed origin (such as `pecl`
and other places).
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.,
@ -43,23 +35,20 @@ attributes named based on major and minor version number; e.g.,
#### Installing PHP with packages
There's two different kinds of things you could install:
- A command line utility. Simply refer to it via
`php*.packages.*` , and it automatically comes with the necessary
PHP environment, certain extensions and libraries around it.
- A PHP interpreter with certain extensions available. The `php`
attribute provides `php.buildEnv` that allows you to wrap the PHP
derivation with an additional config file that makes PHP import
additional libraries or dependencies.
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 `imagick` and `opcache` enabled, and
configure it for the "foo" `phpfpm` pool:
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 exts. opcache ]; };
myPhp = php.buildEnv { exts = pp: with pp; [ imagick opcache ]; };
in {
services.phpfpm.pools."foo".phpPackage = myPhp;
};
@ -68,8 +57,8 @@ in {
##### Example usage with `nix-shell`
This brings up a temporary environment that contains a PHP interpreter
with `imagick` and `opcache` enabled.
with the extensions `imagick` and `opcache` enabled.
```sh
nix-shell -p 'php.buildEnv { exts = pp: with pp; [ imagick exts. opcache ]; }'
nix-shell -p 'php.buildEnv { exts = pp: with pp; [ imagick opcache ]; }'
```