# Installation

To get started using `ext-php-rs` you will need both a Rust toolchain
and a PHP development environment. We'll cover each of these below.

## Rust toolchain

First, make sure you have rust installed on your system.
If you haven't already done so you can do so by following the instructions [here](https://www.rust-lang.org/tools/install).
`ext-php-rs` runs on both the stable and nightly versions so you can choose whichever one fits you best.

## PHP development environment

In order to develop PHP extensions, you'll need the following installed on your system:

1. The PHP CLI executable itself
2. The PHP development headers
3. The `php-config` binary

While the easiest way to get started is to use the packages provided by your distribution,
we recommend building PHP from source.

**NB:** To use `ext-php-rs` you'll need at least PHP 8.0.

### Using a package manager

```sh
# Debian and derivatives
apt install php-dev
# Arch Linux
pacman -S php
# Fedora
dnf install php-devel
# Homebrew
brew install php
```

### Compiling PHP from source

Please refer to this [PHP internals book chapter](https://www.phpinternalsbook.com/php7/build_system/building_php.html)
for an in-depth guide on how to build PHP from source.

**TL;DR;** use the following commands to build a minimal development version
with debug symbols enabled.

```sh
# clone the php-src repository
git clone https://github.com/php/php-src.git
cd php-src
# by default you will be on the master branch, which is the current
# development version. You can check out a stable branch instead:
git checkout PHP-8.1
./buildconf
PREFIX="${HOME}/build/php"
./configure --prefix="${PREFIX}" \
    --enable-debug \
    --disable-all --disable-cgi
make -j "$(nproc)"
make install
```

The PHP CLI binary should now be located at `${PREFIX}/bin/php`
and the `php-config` binary at `${PREFIX}/bin/php-config`.

## Next steps

Now that we have our development environment in place,
let's go [build an extension](./hello_world.md) !
