> ## Documentation Index
> Fetch the complete documentation index at: https://launchdarkly-preview.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# PHP SDK reference

> This topic documents how to get started with the server-side PHP SDK, and links to reference information on all of the supported features.

> For the complete documentation index, see [llms.txt](/llms.txt). For the full documentation snapshot, see [llms-full.txt](/llms-full.txt).

## Overview

This topic documents how to get started with the PHP SDK, and links to reference information on all of the supported features.

<Note title="SDK quick links">
  LaunchDarkly's SDKs are open source. In addition to this reference guide, we provide source, API reference documentation, and a sample application:
</Note>

| Resource | Location |
| - | - |
| SDK API documentation | [SDK API docs](https://launchdarkly.github.io/php-server-sdk/) |
| Supported SDK Versions | [PHP SDK](../concepts/supported-versions#php-sdk) |
| GitHub repository | [php-server-sdk](https://github.com/launchdarkly/php-server-sdk) |
| Sample application | [PHP](https://github.com/launchdarkly/hello-php) ,  [OpenFeature PHP](https://github.com/launchdarkly/hello-openfeature-php-server) |
| Published module | [Packagist](https://packagist.org/packages/launchdarkly/server-sdk) |

## Get started

After you complete the [Getting Started process](/home/getting-started), follow these instructions to start using the LaunchDarkly SDK in your PHP application.

### Understand version compatibility

The LaunchDarkly PHP SDK, version 6.x and higher, is compatible with PHP 8.1 and higher. Starting with version 6.6, the LaunchDarkly PHP SDK also requires that the `apcu` extension is installed and enabled. The SDK uses the [APCu cache](https://www.php.net/manual/en/book.apcu.php) to help improve performance.

If you are using older versions:

* The LaunchDarkly PHP SDK, version 5.x, is compatible with PHP 8.0 and higher.
* The LaunchDarkly PHP SDK, version 4.x, is compatible with PHP 7.3 and higher.
* If you need compatibility with older versions of PHP, use version 3.x of the LaunchDarkly PHP SDK.

### Install the SDK

The first step is to install [Composer](https://getcomposer.org/) and the LaunchDarkly SDK as a dependency in your application. Refer to the [SDK releases page](https://github.com/launchdarkly/php-server-sdk/releases) to identify the latest version if you want to depend on a specific version.

To install Composer:

<CodeGroup>
  ```bash title="Shell" theme={null}
      php composer.phar require launchdarkly/server-sdk

      # In earlier versions, this was "launchdarkly/launchdarkly-php"
  ```
</CodeGroup>

Then require Composer's autoloader:

<CodeGroup>
  ```php title="PHP" theme={null}
      require 'vendor/autoload.php';
  ```
</CodeGroup>

<Note title="The PHP SDK uses an SDK key">
  The PHP SDK uses an SDK key. Keys are specific to each project and environment. They are available from **Project settings**, on the **Environments** list. To learn more about key types, read [Keys](/sdk/concepts/client-side-server-side#keys).
</Note>

### Initialize the client

After you install and import the SDK, create a single, shared instance of [`LDClient`](http://launchdarkly.github.io/php-server-sdk/classes/LaunchDarkly-LDClient.html). Specify your SDK key here to authorize your application to connect to a particular environment within LaunchDarkly.

Only create one instance of `client`.

Here's how:

<CodeGroup>
  ```php title="PHP" theme={null}
      $client = new LaunchDarkly\LDClient("YOUR_SDK_KEY");
  ```
</CodeGroup>

To learn more about the specific configuration options available in this SDK, read the SDK API documentation for the [`LDClient` constructor](http://launchdarkly.github.io/php-server-sdk/classes/LaunchDarkly-LDClient.html#method___construct).

### Evaluate a context

You can use `$client` to check which variation a particular context will receive for a given feature flag.

Here's how:

<CodeGroup>
  ```php title="PHP" theme={null}
      $context = LDContext::builder("example-context-key")
        ->name("Sandy")
        ->build();

      if ($client->variation("your.flag.key", $context)) {
          // application code to show the feature
      } else {
          // the code to run if the feature is off
      }
  ```
</CodeGroup>

In our [Getting Started guide](/home/getting-started) we recommend that users shut down the LaunchDarkly client on application termination. This step does not exist in PHP because the PHP SDK does not maintain long-lived network connections nor an event queue.

## Fetch flags

There are two distinct methods of integrating LaunchDarkly in a PHP environment:

* [The Relay Proxy](/sdk/relay-proxy) retrieves and stores flags in [Redis](/sdk/features/storing-data/redis), [DynamoDB](/sdk/features/storing-data/dynamodb), or [Consul](/sdk/features/storing-data/consul). This is the recommended method. If you use synced segments or larger list-based segments, you can only use Redis or DynamoDB as a persistent store.
* [Guzzle Cache Middleware](https://github.com/Kevinrob/guzzle-cache-middleware) requests and caches HTTP responses in an in-memory array. This is the default method.

We strongly suggest using the Relay Proxy. Per-flag caching mode using Guzzle is only intended for low-throughput environments.

### Using the Relay Proxy

PHP's shared-nothing architecture prevents LaunchDarkly from reusing the streaming API connection across requests.

You can use PHP without the Relay Proxy, but we strongly recommend using the Relay Proxy in **daemon mode** if you are using PHP in a high-throughput setting. This makes the Relay Proxy receive feature flag updates.

To learn more, read [Configuring SDKs to use different modes](/sdk/relay-proxy/sdk-config#configuring-sdks-to-use-different-modes).

### Using Guzzle

For the latest major version of the PHP SDK, use open-ended dependencies. For older versions, refer to your version's composer.json file.

To require Guzzle as a dependency:

<CodeGroup>
  ```php title="PHP" theme={null}
      php composer.phar require "guzzlehttp/guzzle:^6.3.0"
      php composer.phar require "kevinrob/guzzle-cache-middleware:^1.4.0"
  ```
</CodeGroup>

Guzzle is then used to fetch flags. You can persist your cache somewhere other than the default in-memory store, like Memcached or Redis.

You can then specify your cache when initializing the client with the cache option:

<CodeGroup>
  ```php title="PHP" theme={null}
      $client = new LaunchDarkly\LDClient("YOUR_SDK_KEY", ["cache" => $cacheStorage]);
  ```
</CodeGroup>

## Supported features

This SDK supports the following features:

* [Anonymous contexts and users](/sdk/features/anonymous#php)
* [Big segments](/sdk/features/big-segments#php)
* [Configuration](/sdk/features/config#php), including
  * [Application metadata configuration](/sdk/features/app-config#php)
  * [Migration configuration](/sdk/features/migration-config#php)
  * [Service endpoint configuration](/sdk/features/service-endpoint-configuration/server-side#php)
* [Context configuration](/sdk/features/context-config/server-side#php)
* [Evaluating flags](/sdk/features/evaluating#php)
* [Flag evaluation reasons](/sdk/features/evaluation-reasons/server-side#php)
* [Flushing events](/sdk/features/flush#php)
* [Getting all flags](/sdk/features/all-flags#php)
* [Identifying and changing contexts](/sdk/features/identify#php)
* [Logging configuration](/sdk/features/logging#php)
* [Migrations](/sdk/features/migrations#php)
* [Offline mode](/sdk/features/offline-mode#php)
* [Private attributes](/sdk/features/private-attributes/server-side#php)
* [Reading flags from a file](/sdk/features/flags-from-files#php)
* [Relay Proxy configuration](/sdk/features/relay-proxy-configuration)
  * [Using proxy mode](/sdk/features/relay-proxy-configuration/proxy-mode#php)
  * [Using daemon mode](/sdk/features/relay-proxy-configuration/daemon-mode#php)
* [Secure mode](/sdk/features/secure-mode#php)
* [Sending custom events](/sdk/features/events#php)
* [Storing data](/sdk/features/storing-data#nodejs-server-side)
* [Test data sources](/sdk/features/test-data-sources#php)
