nixpkgs/doc/languages-frameworks/php.section.md
2020-04-05 16:45:04 +02:00

2.6 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.

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).

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).

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 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.
Example setup for phpfpm

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

let
  myPhp = php.buildEnv { exts = pp: with pp; [ imagick exts.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 imagick and opcache enabled.

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