PHP: Difference between revisions

From NixOS Wiki
imported>JasonWoof
explain configuring extensions without apache too
imported>Onny
Add notes on configuring php-fpm
Line 10: Line 10:




== Setting custom php.ini configurations ==
== Configuration ==
 
==== Setting custom php.ini configurations ===


The `buildEnv` attribute on php can add extra configuration options. For instance, to set a memory_limit in the NixOS configuration.nix:
The `buildEnv` attribute on php can add extra configuration options. For instance, to set a memory_limit in the NixOS configuration.nix:
Line 23: Line 25:
</syntaxhighlight>
</syntaxhighlight>


== Setting custom plugins and php.ini configurations ==
In case of using php-fpm, the following example enables error reporting. Use this only in development environments
 
<syntaxhighlight lang="nix>
services.phpfpm.phpOptions = ''
  display_errors = on;
'';
</syntaxhighlight>
 
=== Setting custom plugins and php.ini configurations ===


In this example we install the [[xdebug]] extension, and add a php.ini directive to enable it.
In this example we install the [[xdebug]] extension, and add a php.ini directive to enable it.

Revision as of 17:27, 30 October 2022

Install

  environment.systemPackages = with pkgs; [ php ];

See nix search php (nix search nixpkgs php with Flakes) for additional versions like php74, etc.


Configuration

= Setting custom php.ini configurations

The `buildEnv` attribute on php can add extra configuration options. For instance, to set a memory_limit in the NixOS configuration.nix:

environment.systemPackages =
  let
    php = pkgs.php.buildEnv { extraConfig = "memory_limit = 2G"; };
  in [
    php
  ];

In case of using php-fpm, the following example enables error reporting. Use this only in development environments

services.phpfpm.phpOptions = ''
  display_errors = on;
'';

Setting custom plugins and php.ini configurations

In this example we install the xdebug extension, and add a php.ini directive to enable it.

environment.systemPackages = [
  (pkgs.php.buildEnv {
    extensions = ({ enabled, all }: enabled ++ (with all; [
      xdebug
    ]));
    extraConfig = ''
      xdebug.mode=debug
    '';
  })


Apache, plugins, settings

Here's how to configure Apache to use a particular PHP configuration/version/etc

# in /etc/nixos/configuration.nix (not inside systemPackages)
services.httpd.phpPackage = pkgs.php.buildEnv {
    extensions = ({ enabled, all }: enabled ++ (with all; [
        xdebug
    ]));
    extraConfig = ''
        xdebug.mode=debug
    '';
};