docs/Nixpkgs/Languages-And-Frameworks/php.section/index.html

3105 lines
69 KiB
HTML
Raw Permalink Normal View History

2024-07-24 19:14:02 +00:00
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Aux Documentation">
<meta name="author" content="Nixpkgs Aux, and Lix Contributors">
<link rel="canonical" href="https://docs.auxolotl.org/Nixpkgs/Languages-And-Frameworks/php.section/">
<link rel="prev" href="../perl.section/">
<link rel="next" href="../pkg-config.section/">
<link rel="icon" href="../../../assets/aux-logo.svg">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.29">
<title>PHP - Aux Docs</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.76a95c52.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.bunny.net/css?family=IBM+Plex+Sans:300,300i,400,400i,700,700i%7CIBM+Plex+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"IBM Plex Sans";--md-code-font:"IBM Plex Mono"}</style>
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="PHP {#sec-php} - Aux Docs" >
<meta property="og:description" content="Aux Documentation" >
<meta property="og:image" content="https://docs.auxolotl.org/assets/images/social/Nixpkgs/Languages-And-Frameworks/php.section.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="https://docs.auxolotl.org/Nixpkgs/Languages-And-Frameworks/php.section/" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="PHP {#sec-php} - Aux Docs" >
<meta name="twitter:description" content="Aux Documentation" >
<meta name="twitter:image" content="https://docs.auxolotl.org/assets/images/social/Nixpkgs/Languages-And-Frameworks/php.section.png" >
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#sec-php" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="Aux Docs" class="md-header__button md-logo" aria-label="Aux Docs" data-md-component="logo">
<img src="../../../assets/aux-logo.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Aux Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
PHP
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-label="Dark Mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Dark Mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="blue" aria-label="Light Mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Light Mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5c-.84 0-1.65.15-2.39.42L12 2M3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29L3.34 7m.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14L3.36 17M20.65 7l-1.77 3.79a7.023 7.023 0 0 0-2.38-4.15l4.15.36m-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29L20.64 17M12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44L12 22Z"/></svg>
</label>
</form>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://git.auxolotl.org/auxolotl/docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</div>
<div class="md-source__repository">
auxolotl/docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../.." class="md-tabs__link">
Aux Documentation Hub
</a>
</li>
<li class="md-tabs__item">
<a href="../../../TODO/" class="md-tabs__link">
TODO
</a>
</li>
<li class="md-tabs__item">
<a href="../../../Aux/" class="md-tabs__link">
Aux
</a>
</li>
<li class="md-tabs__item">
<a href="../../../Lix/" class="md-tabs__link">
Lix
</a>
</li>
<li class="md-tabs__item">
<a href="../../../NixOS/appstream/" class="md-tabs__link">
NixOS
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../" class="md-tabs__link">
Nixpkgs
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="Aux Docs" class="md-nav__button md-logo" aria-label="Aux Docs" data-md-component="logo">
<img src="../../../assets/aux-logo.svg" alt="logo">
</a>
Aux Docs
</label>
<div class="md-nav__source">
<a href="https://git.auxolotl.org/auxolotl/docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</div>
<div class="md-source__repository">
auxolotl/docs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
<span class="md-ellipsis">
Aux Documentation Hub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../TODO/" class="md-nav__link">
<span class="md-ellipsis">
TODO
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../Aux/" class="md-nav__link">
<span class="md-ellipsis">
Aux
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../Lix/" class="md-nav__link">
<span class="md-ellipsis">
Lix
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../NixOS/appstream/" class="md-nav__link">
<span class="md-ellipsis">
NixOS
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
<div class="md-nav__link md-nav__container">
<a href="../../" class="md-nav__link ">
<span class="md-ellipsis">
Nixpkgs
</span>
</a>
<label class="md-nav__link " for="__nav_6" id="__nav_6_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Nixpkgs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../options/" class="md-nav__link">
<span class="md-ellipsis">
Options
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Build-Helpers/" class="md-nav__link">
<span class="md-ellipsis">
Build Helpers
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Development/" class="md-nav__link">
<span class="md-ellipsis">
Development
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Functions/" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Hooks/" class="md-nav__link">
<span class="md-ellipsis">
Hooks
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" checked>
<div class="md-nav__link md-nav__container">
<a href="../" class="md-nav__link ">
<span class="md-ellipsis">
Languages And Frameworks
</span>
</a>
<label class="md-nav__link " for="__nav_6_7" id="__nav_6_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6_7">
<span class="md-nav__icon md-icon"></span>
Languages And Frameworks
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../agda.section/" class="md-nav__link">
<span class="md-ellipsis">
Agda
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../android.section/" class="md-nav__link">
<span class="md-ellipsis">
Android
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../beam.section/" class="md-nav__link">
<span class="md-ellipsis">
BEAM Languages (Erlang, Elixir &amp; LFE)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../bower.section/" class="md-nav__link">
<span class="md-ellipsis">
Bower
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../chicken.section/" class="md-nav__link">
<span class="md-ellipsis">
CHICKEN
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../coq.section/" class="md-nav__link">
<span class="md-ellipsis">
Coq and coq packages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../crystal.section/" class="md-nav__link">
<span class="md-ellipsis">
Crystal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cuda.section/" class="md-nav__link">
<span class="md-ellipsis">
CUDA
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cuelang.section/" class="md-nav__link">
<span class="md-ellipsis">
Cue (Cuelang)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dart.section/" class="md-nav__link">
<span class="md-ellipsis">
Dart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dhall.section/" class="md-nav__link">
<span class="md-ellipsis">
Dhall
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dlang.section/" class="md-nav__link">
<span class="md-ellipsis">
D (Dlang)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet.section/" class="md-nav__link">
<span class="md-ellipsis">
Dotnet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../emscripten.section/" class="md-nav__link">
<span class="md-ellipsis">
Emscripten
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../gnome.section/" class="md-nav__link">
<span class="md-ellipsis">
GNOME
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../go.section/" class="md-nav__link">
<span class="md-ellipsis">
Go
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../gradle.section/" class="md-nav__link">
<span class="md-ellipsis">
Gradle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hare.section/" class="md-nav__link">
<span class="md-ellipsis">
Hare
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../haskell.section/" class="md-nav__link">
<span class="md-ellipsis">
Haskell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hy.section/" class="md-nav__link">
<span class="md-ellipsis">
Hy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../idris.section/" class="md-nav__link">
<span class="md-ellipsis">
Idris
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../idris2.section/" class="md-nav__link">
<span class="md-ellipsis">
Idris2
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ios.section/" class="md-nav__link">
<span class="md-ellipsis">
iOS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../java.section/" class="md-nav__link">
<span class="md-ellipsis">
Java
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript.section/" class="md-nav__link">
<span class="md-ellipsis">
Javascript
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../julia.section/" class="md-nav__link">
<span class="md-ellipsis">
Julia
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lisp.section/" class="md-nav__link">
<span class="md-ellipsis">
lisp-modules
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lua.section/" class="md-nav__link">
<span class="md-ellipsis">
Lua
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../maven.section/" class="md-nav__link">
<span class="md-ellipsis">
Maven
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nim.section/" class="md-nav__link">
<span class="md-ellipsis">
Nim
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ocaml.section/" class="md-nav__link">
<span class="md-ellipsis">
OCaml
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../octave.section/" class="md-nav__link">
<span class="md-ellipsis">
Octave
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../perl.section/" class="md-nav__link">
<span class="md-ellipsis">
Perl
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
PHP
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
PHP
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#ssec-php-user-guide" class="md-nav__link">
<span class="md-ellipsis">
User Guide
</span>
</a>
<nav class="md-nav" aria-label="User Guide">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ssec-php-user-guide-overview" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-php-user-guide-installing-with-extensions" class="md-nav__link">
<span class="md-ellipsis">
Installing PHP with extensions
</span>
</a>
<nav class="md-nav" aria-label="Installing PHP with extensions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ssec-php-user-guide-installing-with-extensions-phpfpm" class="md-nav__link">
<span class="md-ellipsis">
Example setup for phpfpm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-php-user-guide-installing-with-extensions-nix-shell" class="md-nav__link">
<span class="md-ellipsis">
Example usage with nix-shell
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-php-user-guide-installing-packages-with-extensions" class="md-nav__link">
<span class="md-ellipsis">
Installing PHP packages with extensions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-php-user-guide-overriding-packages" class="md-nav__link">
<span class="md-ellipsis">
Overriding PHP packages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-building-php-projects" class="md-nav__link">
<span class="md-ellipsis">
Building PHP projects
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../pkg-config.section/" class="md-nav__link">
<span class="md-ellipsis">
pkg-config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../python.section/" class="md-nav__link">
<span class="md-ellipsis">
Python
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../qt.section/" class="md-nav__link">
<span class="md-ellipsis">
Qt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../r.section/" class="md-nav__link">
<span class="md-ellipsis">
R
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ruby.section/" class="md-nav__link">
<span class="md-ellipsis">
Ruby
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rust.section/" class="md-nav__link">
<span class="md-ellipsis">
Rust
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scheme.section/" class="md-nav__link">
<span class="md-ellipsis">
Scheme
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../swift.section/" class="md-nav__link">
<span class="md-ellipsis">
Swift
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../texlive.section/" class="md-nav__link">
<span class="md-ellipsis">
TeX Live
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../titanium.section/" class="md-nav__link">
<span class="md-ellipsis">
Titanium
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vim.section/" class="md-nav__link">
<span class="md-ellipsis">
Vim
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Library-Reference/asserts/" class="md-nav__link">
<span class="md-ellipsis">
Library Reference
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Module-System/module-system.chapter/" class="md-nav__link">
<span class="md-ellipsis">
Module System
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Packages/" class="md-nav__link">
<span class="md-ellipsis">
Packages
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Standard-Environment/" class="md-nav__link">
<span class="md-ellipsis">
Standard Environment
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Using-Nixpkgs/" class="md-nav__link">
<span class="md-ellipsis">
Using Nixpkgs
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#ssec-php-user-guide" class="md-nav__link">
<span class="md-ellipsis">
User Guide
</span>
</a>
<nav class="md-nav" aria-label="User Guide">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ssec-php-user-guide-overview" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-php-user-guide-installing-with-extensions" class="md-nav__link">
<span class="md-ellipsis">
Installing PHP with extensions
</span>
</a>
<nav class="md-nav" aria-label="Installing PHP with extensions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ssec-php-user-guide-installing-with-extensions-phpfpm" class="md-nav__link">
<span class="md-ellipsis">
Example setup for phpfpm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-php-user-guide-installing-with-extensions-nix-shell" class="md-nav__link">
<span class="md-ellipsis">
Example usage with nix-shell
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-php-user-guide-installing-packages-with-extensions" class="md-nav__link">
<span class="md-ellipsis">
Installing PHP packages with extensions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-php-user-guide-overriding-packages" class="md-nav__link">
<span class="md-ellipsis">
Overriding PHP packages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-building-php-projects" class="md-nav__link">
<span class="md-ellipsis">
Building PHP projects
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="sec-php">PHP</h1>
<h2 id="ssec-php-user-guide">User Guide</h2>
<h3 id="ssec-php-user-guide-overview">Overview</h3>
<p>Several versions of PHP are available on Nix, each of which having a
wide variety of extensions and libraries available.</p>
<p>The different versions of PHP that nixpkgs provides are located under
attributes named based on major and minor version number; e.g.,
<code>php81</code> is PHP 8.1.</p>
<p>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 <a href="https://www.php.net/supported-versions.php">PHP Supported
Versions</a>.</p>
<p>The attribute <code>php</code> refers to the version of PHP considered most
stable and thoroughly tested in nixpkgs for any given release of
NixOS - not necessarily the latest major release from upstream.</p>
<p>All available PHP attributes are wrappers around their respective
binary PHP package and provide commonly used extensions this way. The
real PHP 8.1 package, i.e. the unwrapped one, is available as
<code>php81.unwrapped</code>; see the next section for more details.</p>
<p>Interactive tools built on PHP are put in <code>php.packages</code>; composer is
for example available at <code>php.packages.composer</code>.</p>
<p>Most extensions that come with PHP, as well as some popular
third-party ones, are available in <code>php.extensions</code>; for example, the
opcache extension shipped with PHP is available at
<code>php.extensions.opcache</code> and the third-party ImageMagick extension at
<code>php.extensions.imagick</code>.</p>
<h3 id="ssec-php-user-guide-installing-with-extensions">Installing PHP with extensions</h3>
<p>A PHP package with specific extensions enabled can be built using
<code>php.withExtensions</code>. This is a function which accepts an anonymous
function as its only argument; the function should accept two named
parameters: <code>enabled</code> - a list of currently enabled extensions and
<code>all</code> - the set of all extensions, and return a list of wanted
extensions. For example, a PHP package with all default extensions and
ImageMagick enabled:</p>
<div class="highlight"><pre><span></span><code>php<span class="o">.</span>withExtensions <span class="p">({</span> enabled<span class="p">,</span> all <span class="p">}:</span>
enabled <span class="o">++</span> <span class="p">[</span> all<span class="o">.</span>imagick <span class="p">])</span>
</code></pre></div>
<p>To exclude some, but not all, of the default extensions, you can
filter the <code>enabled</code> list like this:</p>
<div class="highlight"><pre><span></span><code>php<span class="o">.</span>withExtensions <span class="p">({</span> enabled<span class="p">,</span> all <span class="p">}:</span>
<span class="p">(</span>lib<span class="o">.</span>filter <span class="p">(</span>e<span class="p">:</span> e <span class="o">!=</span> php<span class="o">.</span>extensions<span class="o">.</span>opcache<span class="p">)</span> enabled<span class="p">)</span>
<span class="o">++</span> <span class="p">[</span> all<span class="o">.</span>imagick <span class="p">])</span>
</code></pre></div>
<p>To build your list of extensions from the ground up, you can
ignore <code>enabled</code>:</p>
<div class="highlight"><pre><span></span><code>php<span class="o">.</span>withExtensions <span class="p">({</span> all<span class="p">,</span> <span class="o">...</span> <span class="p">}:</span> <span class="k">with</span> all<span class="p">;</span> <span class="p">[</span> imagick opcache <span class="p">])</span>
</code></pre></div>
<p><code>php.withExtensions</code> provides extensions by wrapping a minimal php
base package, providing a <code>php.ini</code> file listing all extensions to be
loaded. You can access this package through the <code>php.unwrapped</code>
attribute; useful if you, for example, need access to the <code>dev</code>
output. The generated <code>php.ini</code> file can be accessed through the
<code>php.phpIni</code> attribute.</p>
<p>If you want a PHP build with extra configuration in the <code>php.ini</code>
file, you can use <code>php.buildEnv</code>. This function takes two named and
optional parameters: <code>extensions</code> and <code>extraConfig</code>. <code>extensions</code>
takes an extension specification equivalent to that of
<code>php.withExtensions</code>, <code>extraConfig</code> a string of additional <code>php.ini</code>
configuration parameters. For example, a PHP package with the opcache
and ImageMagick extensions enabled, and <code>memory_limit</code> set to <code>256M</code>:</p>
<div class="highlight"><pre><span></span><code>php<span class="o">.</span>buildEnv <span class="p">{</span>
<span class="ss">extensions</span> <span class="o">=</span> <span class="p">{</span> all<span class="p">,</span> <span class="o">...</span> <span class="p">}:</span> <span class="k">with</span> all<span class="p">;</span> <span class="p">[</span> imagick opcache <span class="p">];</span>
<span class="ss">extraConfig</span> <span class="o">=</span> <span class="s2">&quot;memory_limit=256M&quot;</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<h4 id="ssec-php-user-guide-installing-with-extensions-phpfpm">Example setup for <code>phpfpm</code></h4>
<p>You can use the previous examples in a <code>phpfpm</code> pool called <code>foo</code> as
follows:</p>
<div class="highlight"><pre><span></span><code><span class="k">let</span>
<span class="ss">myPhp</span> <span class="o">=</span> php<span class="o">.</span>withExtensions <span class="p">({</span> all<span class="p">,</span> <span class="o">...</span> <span class="p">}:</span> <span class="k">with</span> all<span class="p">;</span> <span class="p">[</span> imagick opcache <span class="p">]);</span>
<span class="k">in</span> <span class="p">{</span>
services<span class="o">.</span>phpfpm<span class="o">.</span>pools<span class="o">.</span><span class="s2">&quot;foo&quot;</span><span class="o">.</span><span class="ss">phpPackage</span> <span class="o">=</span> myPhp<span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="k">let</span>
<span class="ss">myPhp</span> <span class="o">=</span> php<span class="o">.</span>buildEnv <span class="p">{</span>
<span class="ss">extensions</span> <span class="o">=</span> <span class="p">{</span> all<span class="p">,</span> <span class="o">...</span> <span class="p">}:</span> <span class="k">with</span> all<span class="p">;</span> <span class="p">[</span> imagick opcache <span class="p">];</span>
<span class="ss">extraConfig</span> <span class="o">=</span> <span class="s2">&quot;memory_limit=256M&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">in</span> <span class="p">{</span>
services<span class="o">.</span>phpfpm<span class="o">.</span>pools<span class="o">.</span><span class="s2">&quot;foo&quot;</span><span class="o">.</span><span class="ss">phpPackage</span> <span class="o">=</span> myPhp<span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<h4 id="ssec-php-user-guide-installing-with-extensions-nix-shell">Example usage with <code>nix-shell</code></h4>
<p>This brings up a temporary environment that contains a PHP interpreter
with the extensions <code>imagick</code> and <code>opcache</code> enabled:</p>
<div class="highlight"><pre><span></span><code>nix-shell<span class="w"> </span>-p<span class="w"> </span><span class="s1">&#39;php.withExtensions ({ all, ... }: with all; [ imagick opcache ])&#39;</span>
</code></pre></div>
<h3 id="ssec-php-user-guide-installing-packages-with-extensions">Installing PHP packages with extensions</h3>
<p>All interactive tools use the PHP package you get them from, so all
packages at <code>php.packages.*</code> use the <code>php</code> package with its default
extensions. Sometimes this default set of extensions isn't enough and
you may want to extend it. A common case of this is the <code>composer</code>
package: a project may depend on certain extensions and <code>composer</code>
won't work with that project unless those extensions are loaded.</p>
<p>Example of building <code>composer</code> with additional extensions:</p>
<div class="highlight"><pre><span></span><code><span class="p">(</span>php<span class="o">.</span>withExtensions <span class="p">({</span> all<span class="p">,</span> enabled <span class="p">}:</span>
enabled <span class="o">++</span> <span class="p">(</span><span class="k">with</span> all<span class="p">;</span> <span class="p">[</span> imagick redis <span class="p">]))</span>
<span class="p">)</span><span class="o">.</span>packages<span class="o">.</span>composer
</code></pre></div>
<h3 id="ssec-php-user-guide-overriding-packages">Overriding PHP packages</h3>
<p><code>php-packages.nix</code> form a scope, allowing us to override the packages defined
within. For example, to apply a patch to a <code>mysqlnd</code> extension, you can
pass an overlay-style function to <code>php</code>s <code>packageOverrides</code> argument:</p>
<div class="highlight"><pre><span></span><code>php<span class="o">.</span>override <span class="p">{</span>
<span class="ss">packageOverrides</span> <span class="o">=</span> final<span class="p">:</span> prev<span class="p">:</span> <span class="p">{</span>
<span class="ss">extensions</span> <span class="o">=</span> prev<span class="o">.</span>extensions <span class="o">//</span> <span class="p">{</span>
<span class="ss">mysqlnd</span> <span class="o">=</span> prev<span class="o">.</span>extensions<span class="o">.</span>mysqlnd<span class="o">.</span>overrideAttrs <span class="p">(</span>attrs<span class="p">:</span> <span class="p">{</span>
<span class="ss">patches</span> <span class="o">=</span> attrs<span class="o">.</span>patches <span class="ow">or</span> <span class="p">[]</span> <span class="o">++</span> <span class="p">[</span>
<span class="c1"># ...</span>
<span class="p">];</span>
<span class="p">});</span>
<span class="p">};</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="ssec-building-php-projects">Building PHP projects</h3>
<p>With <a href="https://getcomposer.org/">Composer</a>, you can effectively build PHP
projects by streamlining dependency management. As the de-facto standard
dependency manager for PHP, Composer enables you to declare and manage the
libraries your project relies on, ensuring a more organized and efficient
development process.</p>
<p>Composer is not a package manager in the same sense as <code>Yum</code> or <code>Apt</code> are. Yes,
it deals with "packages" or libraries, but it manages them on a per-project
basis, installing them in a directory (e.g. <code>vendor</code>) inside your project. By
default, it does not install anything globally. This idea is not new and
Composer is strongly inspired by node's <code>npm</code> and ruby's <code>bundler</code>.</p>
<p>Currently, there is no other PHP tool that offers the same functionality as
Composer. Consequently, incorporating a helper in Nix to facilitate building
such applications is a logical choice.</p>
<p>In a Composer project, dependencies are defined in a <code>composer.json</code> file,
while their specific versions are locked in a <code>composer.lock</code> file. Some
Composer-based projects opt to include this <code>composer.lock</code> file in their source
code, while others choose not to.</p>
<p>In Nix, there are multiple approaches to building a Composer-based project.</p>
<p>One such method is the <code>php.buildComposerProject</code> helper function, which serves
as a wrapper around <code>mkDerivation</code>.</p>
<p>Using this function, you can build a PHP project that includes both a
<code>composer.json</code> and <code>composer.lock</code> file. If the project specifies binaries
using the <code>bin</code> attribute in <code>composer.json</code>, these binaries will be
automatically linked and made accessible in the derivation. In this context,
"binaries" refer to PHP scripts that are intended to be executable.</p>
<p>To use the helper effectively, add the <code>vendorHash</code> attribute, which
enables the wrapper to handle the heavy lifting.</p>
<p>Internally, the helper operates in three stages:</p>
<ol>
<li>It constructs a <code>composerRepository</code> attribute derivation by creating a
composer repository on the filesystem containing dependencies specified in
<code>composer.json</code>. This process uses the function
<code>php.mkComposerRepository</code> which in turn uses the
<code>php.composerHooks.composerRepositoryHook</code> hook. Internally this function uses
a custom
<a href="https://github.com/nix-community/composer-local-repo-plugin">Composer plugin</a> to
generate the repository.</li>
<li>The resulting <code>composerRepository</code> derivation is then used by the
<code>php.composerHooks.composerInstallHook</code> hook, which is responsible for
creating the final <code>vendor</code> directory.</li>
<li>Any "binary" specified in the <code>composer.json</code> are linked and made accessible
in the derivation.</li>
</ol>
<p>As the autoloader optimization can be activated directly within the
<code>composer.json</code> file, we do not enable any autoloader optimization flags.</p>
<p>To customize the PHP version, you can specify the <code>php</code> attribute. Similarly, if
you wish to modify the Composer version, use the <code>composer</code> attribute. It is
important to note that both attributes should be of the <code>derivation</code> type.</p>
<p>Here's an example of working code example using <code>php.buildComposerProject</code>:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span> php<span class="p">,</span> fetchFromGitHub <span class="p">}:</span>
php<span class="o">.</span>buildComposerProject <span class="p">(</span>finalAttrs<span class="p">:</span> <span class="p">{</span>
<span class="ss">pname</span> <span class="o">=</span> <span class="s2">&quot;php-app&quot;</span><span class="p">;</span>
<span class="ss">version</span> <span class="o">=</span> <span class="s2">&quot;1.0.0&quot;</span><span class="p">;</span>
<span class="ss">src</span> <span class="o">=</span> fetchFromGitHub <span class="p">{</span>
<span class="ss">owner</span> <span class="o">=</span> <span class="s2">&quot;git-owner&quot;</span><span class="p">;</span>
<span class="ss">repo</span> <span class="o">=</span> <span class="s2">&quot;git-repo&quot;</span><span class="p">;</span>
<span class="ss">rev</span> <span class="o">=</span> finalAttrs<span class="o">.</span>version<span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-VcQRSss2dssfkJ+iUb5qT+FJ10GHiFDzySigcmuVI+8=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="c1"># PHP version containing the `ast` extension enabled</span>
<span class="ss">php</span> <span class="o">=</span> php<span class="o">.</span>buildEnv <span class="p">{</span>
<span class="ss">extensions</span> <span class="o">=</span> <span class="p">({</span> enabled<span class="p">,</span> all <span class="p">}:</span> enabled <span class="o">++</span> <span class="p">(</span><span class="k">with</span> all<span class="p">;</span> <span class="p">[</span>
ast
<span class="p">]));</span>
<span class="p">};</span>
<span class="c1"># The composer vendor hash</span>
<span class="ss">vendorHash</span> <span class="o">=</span> <span class="s2">&quot;sha256-86s/F+/5cBAwBqZ2yaGRM5rTGLmou5//aLRK5SA0WiQ=&quot;</span><span class="p">;</span>
<span class="c1"># If the composer.lock file is missing from the repository, add it:</span>
<span class="c1"># composerLock = ./path/to/composer.lock;</span>
<span class="p">})</span>
</code></pre></div>
<p>In case the file <code>composer.lock</code> is missing from the repository, it is possible
to specify it using the <code>composerLock</code> attribute.</p>
<p>The other method is to use all these methods and hooks individually. This has
the advantage of building a PHP library within another derivation very easily
when necessary.</p>
<p>Here's a working code example to build a PHP library using <code>mkDerivation</code> and
separate functions and hooks:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span> stdenvNoCC<span class="p">,</span> fetchFromGitHub<span class="p">,</span> php <span class="p">}:</span>
stdenvNoCC<span class="o">.</span>mkDerivation <span class="p">(</span>finalAttrs<span class="p">:</span>
<span class="k">let</span>
<span class="ss">src</span> <span class="o">=</span> fetchFromGitHub <span class="p">{</span>
<span class="ss">owner</span> <span class="o">=</span> <span class="s2">&quot;git-owner&quot;</span><span class="p">;</span>
<span class="ss">repo</span> <span class="o">=</span> <span class="s2">&quot;git-repo&quot;</span><span class="p">;</span>
<span class="ss">rev</span> <span class="o">=</span> finalAttrs<span class="o">.</span>version<span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-VcQRSss2dssfkJ+iUb5qT+FJ10GHiFDzySigcmuVI+8=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">in</span> <span class="p">{</span>
<span class="k">inherit</span> src<span class="p">;</span>
<span class="ss">pname</span> <span class="o">=</span> <span class="s2">&quot;php-app&quot;</span><span class="p">;</span>
<span class="ss">version</span> <span class="o">=</span> <span class="s2">&quot;1.0.0&quot;</span><span class="p">;</span>
<span class="ss">buildInputs</span> <span class="o">=</span> <span class="p">[</span> php <span class="p">];</span>
<span class="ss">nativeBuildInputs</span> <span class="o">=</span> <span class="p">[</span>
php<span class="o">.</span>packages<span class="o">.</span>composer
<span class="c1"># This hook will use the attribute `composerRepository`</span>
php<span class="o">.</span>composerHooks<span class="o">.</span>composerInstallHook
<span class="p">];</span>
<span class="ss">composerRepository</span> <span class="o">=</span> php<span class="o">.</span>mkComposerRepository <span class="p">{</span>
<span class="k">inherit</span> <span class="p">(</span>finalAttrs<span class="p">)</span> pname version src<span class="p">;</span>
<span class="ss">composerNoDev</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">composerNoPlugins</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">composerNoScripts</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
<span class="c1"># Specifying a custom composer.lock since it is not present in the sources.</span>
<span class="ss">composerLock</span> <span class="o">=</span> <span class="l">./composer.lock</span><span class="p">;</span>
<span class="c1"># The composer vendor hash</span>
<span class="ss">vendorHash</span> <span class="o">=</span> <span class="s2">&quot;sha256-86s/F+/5cBAwBqZ2yaGRM5rTGLmou5//aLRK5SA0WiQ=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">})</span>
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Licenced MIT
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://git.auxolotl.org/auxolotl/docs" target="_blank" rel="noopener" title="Aux Docs Repo" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</a>
<a href="https://forum.aux.computer/" target="_blank" rel="noopener" title="Aux Forum" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563a7.395 7.395 0 0 0-6.337 3.57 7.247 7.247 0 0 0-.148 7.22L4.4 19.61l4.794-1.074a7.424 7.424 0 0 0 8.136-1.39 7.256 7.256 0 0 0 1.737-7.997 7.375 7.375 0 0 0-6.84-4.585h-.008z"/></svg>
</a>
<a href="https://wiki.auxolotl.org/" target="_blank" rel="noopener" title="Aux Wiki" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.801 13.557c.148.098.288.202.417.313 1.854 1.6 3.127 4.656 2.582 7.311-1.091-.255-5.747-1.055-7.638-3.383-.91-1.12-1.366-2.081-1.569-2.885a5.65 5.65 0 0 0 .034-.219c.089.198.197.35.313.466.24.24.521.335.766.372.304.046.594-.006.806-.068l.001.001c.05-.015.433-.116.86-.342.325-.173 2.008-.931 3.428-1.566Zm-7.384 1.435C9.156 16.597 6.6 18.939.614 18.417c.219-1.492 1.31-3.019 2.51-4.11.379-.345.906-.692 1.506-1.009.286.168.598.332.939.486 2.689 1.221 3.903 1.001 4.89.573a1.3 1.3 0 0 0 .054-.025 6.156 6.156 0 0 0-.096.66Zm4.152-.462c.38-.341.877-.916 1.383-1.559-.389-.15-.866-.371-1.319-.591-.598-.29-1.305-.283-2.073-.315a4.685 4.685 0 0 1-.804-.103c.014-.123.027-.246.038-.369.062.104.673.057.871.057.354 0 1.621.034 3.074-.574 1.452-.608 2.55-1.706 3.022-3.225.474-1.52.22-3.091-.168-3.952-.169.709-1.453 2.381-1.926 2.871-.473.489-2.381 2.296-2.972 2.921-.7.74-.688.793-1.332 1.302-.202.19-.499.402-.563.53.027-.338.039-.675.027-.997a7.653 7.653 0 0 0-.032-.523c.322-.059.567-.522.567-.861 0-.224-.106-.247-.271-.229.075-.894.382-3.923 1.254-4.281.218.109.831.068.649-.295-.182-.364-.825-.074-1.081.266-.28.374-.956 2.046-.92 4.324-.113.014-.174.033-.322.033-.171 0-.321-.04-.433-.05.034-2.275-.714-3.772-.84-4.169-.12-.375-.491-.596-.781-.596-.146 0-.272.056-.333.179-.182.363.459.417.677.308.706.321 1.156 3.519 1.254 4.277-.125-.006-.199.035-.199.233 0 .311.17.756.452.843a.442.442 0 0 0-.007.03s-.287.99-.413 2.189a4.665 4.665 0 0 1-.718-.225c-.714-.286-1.355-.583-2.019-.566-.664.018-1.366.023-1.804-.036-.438-.058-.649-.15-.649-.15s-.234.365.257 1.075c.42.607 1.055 1.047 1.644 1.18.589.134 1.972.18 2.785-.377.16-.109.317-.228.459-.34a8.717 8.717 0 0 0-.013.626c-.289.753-.571 1.993-.268 3.338 0-.001.701-.842.787-2.958.006-.144.009-.271.01-.383.052-.248.103-.518.148-.799.072.135.151.277.234.413.511.842 1.791 1.37 2.383 1.49.091.019.187.032.285.038Zm-1.12.745c-.188.055-.445.1-.713.059-.21-.031-.45-.11-.655-.316-.169-.168-.312-.419-.401-.789a9.837 9.837 0 0 0 .039-.82l.049-.243c.563.855 1.865 1.398 2.476 1.522.036.008.072.014.109.02l-.013.009c-.579.415-.76.503-.891.558Zm6.333-2.818c-.257.114-4.111 1.822-5.246 2.363.98-.775 3.017-3.59 3.699-4.774 1.062.661 1.468 1.109 1.623 1.441.101.217.09.38.096.515a.57.57 0 0 1-.172.455Zm-9.213 1.62a1.606 1.606 0 0 1-.19.096c-.954.414-2.126.61-4.728-.571-2.023-.918-3.024-2.157-3.371-2.666.476.161 1.471.473 2.157.524.282.021.703.068 1.167.125.021.209.109.486.345.829l.001.001c.451.651 1.134 1.119 1.765 1.262.622.141 2.083.182 2.942-.407a3.12 3.12 0 0 0 .132-.093l.001.179a6.052 6.052 0 0 0-.221.721Zm5.512-1.271a17.49 17.49 0 0 1-1.326-.589c.437.042 1.054.083 1.692.108-.121.162-.244.323-.366.481Zm.932-1.26c-.12.17-.245.343-.373.517-.241.018-.478.03-.709.038a29.05 29.05 0 0 1-.741-.048c.608-.065 1.228-.252 1.823-.507Zm.22-.315c-.809.382-1.679.648-2.507.648-.472 0-.833.018-1.139.039v.001c-.324-.031-.665-.039-1.019-.054a3.555 3.555 0 0 1-.152-.009c.102-.002.192-.006.249-.006.363 0 1.662.034 3.151-.589 1.508-.632 2.645-1.773 3.136-3.351.37-1.186.31-2.402.086-3.312.458-.336.86-.651 1.147-.91.501-.451.743-.733.848-.869.199.206.714.864.685 2.138-.036 1.611-.606 3.187-1.501 4.154a9.099 9.099 0 0 1-1.321 1.132 11.978 11.978 0 0 0-.644-.422l-.089-.055-.051.091c-.184.332-.5.825-.879 1.374ZM4.763 5.817c-.157 1.144.113 2.323.652 3.099.539.776 2.088 2.29 3.614 2.505.991.14 2.055.134 2.055.134s-.593-.576-1.114-1.66c-.521-1.085-.948-2.104-1.734-2.786-.785-.681-1.601-1.416-2.045-1.945-.444-.53-.59-.86-.59-.86s-.656.175-.838 1.513Zm14.301 4.549a9.162 9.162 0 0 0 1.3-1.12c.326-.352.611-.782.845-1.265 1.315.145 2.399.371 2.791.434 0 0-.679 1.971-3.945 3.022l-.016-.035c-.121-.26-.385-.594-.975-1.036Zm-11.634.859a8.537 8.537 0 0 1-.598-.224c-1.657-.693-2.91-1.944-3.449-3.678-.498-1.601-.292-3.251.091-4.269.225.544.758 1.34 1.262 2.01a3.58 3.58 0 0 0-.172.726c-.163 1.197.123 2.428.687 3.24.416.599 1.417 1.62 2.555 2.193-.128.002-.253.003-.376.002Zm-1.758-.077c-.958-.341-1.901-.787-2.697-1.368C-.07 7.559 0 6.827 0 6.827s1.558-.005 3.088.179c.03.126.065.
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": ["content.tooltips", "search.highlight", "navigation.tabs", "navigation.indexes", "navigation.prune"], "search": "../../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../../assets/javascripts/bundle.fe8b6f2b.min.js"></script>
</body>
</html>