> For the complete documentation index, see [llms.txt](https://mariadb.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mariadb.com/docs/gridgain/gridgain-8/gridgain8-get-started/quick-start/php.md).

# PHP

Install GridGain, start a cluster, and run a simple Hello World example using the PHP thin client.

This chapter explains system requirements for running GridGain and how to install GridGain, start a cluster, and run a simple Hello World example using a thin client for PHP.

Thin Client is a lightweight GridGain connection mode. It does not participate in cluster, never holds any data, or performs computations. All it does is establish a socket connection to an individual GridGain node and perform all operations through that node.

Since GridGain is built on top of Apache Ignite, GridGain reuses Ignite's system properties, environment properties, startup scripts, etc. wherever possible.

## Prerequisites

This section describes the platform requirements for machines running GridGain. GridGain system requirements scale depending on the size of the cluster.

| Requirement | Details                                                                                              |
| ----------- | ---------------------------------------------------------------------------------------------------- |
| JDK         | Oracle JDK 17 or later                                                                               |
| OS          | Linux (any flavor), Windows (10 and up). For Docker environment, we provide Linux docker containers. |
| ISA         | x86-64, SPARC, PowerPC                                                                               |
| Network     | No restrictions (10G recommended)                                                                    |

and:

| Software | Requirement                                                                                                                                                                    |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| PHP      | Version 7.2 or higher and Composer Dependency Manager. PHP Multibyte String extension. Depending on your PHP configuration, you may need to additionally install/configure it. |

### (Optional) Open Ports

Depending on your environment and what your plan is, you may want to open additional ports. GridGain uses the following ports:

* 47100-47200 — ports used by GridGain nodes to communicate. Specific ports used depend on node configuration.
* 47500-47600 — ports used by GridGain nodes to discover other nodes in the network. Specific ports used depend on node configuration.
* 10800 — the port used for [thin clients](/docs/connectors/gridgain-8/clients/getting-started-with-thin-clients.md), [JDBC](/docs/connectors/gridgain-8/sql/jdbc/jdbc-driver.md) and [ODBC](/docs/connectors/gridgain-8/sql/odbc/odbc-driver.md) connections.
* 8080 — the port used for [REST API](/docs/gridgain/gridgain-8/reference/rest-api.md).
* 11211 — the port used by [control script](/docs/gridgain/gridgain-8/reference/cli-tool.md) calls. This port should only be opened on nodes that need to send control script messages to other nodes.

## Installing GridGain

GridGain is distributed as binary, docker, and cloud images, and via RPM/DEB. This chapter explains how to install the binary distribution.

To get started with the GridGain binary distribution:

1. Download the [GridGain binary](https://www.gridgain.com/resources/download) as a zip archive.
2. Unzip the zip archive into the installation folder in your system.
3. Move the `ignite-rest-http` folder from `{gridgain}/libs/optional` to `{gridgain}/libs` to enable the Ignite REST library for the cluster. The library is used by GridGain Control Center for cluster management and monitoring needs.
4. (Optional) Enable required [modules](/docs/gridgain/gridgain-8/gridgain8-development/project-setup.md#enabling-modules).
5. (Optional) Set the `IGNITE_HOME` environment variable or Windows PATH to point to the installation folder and make sure there is no trailing `/` (or `\` for Windows) in the path.

Once that's done, install GridGain PHP Thin Client as a Composer package using the command below:

```shell
composer require gridgain/gridgain-client
```

To use the client in your application, include the `vendor/autoload.php` file, generated by Composer, to your source code, eg.

```php
require_once __DIR__ . '/vendor/autoload.php';
```

You're almost ready to run your first application.

## Starting a GridGain Node

Before connecting to GridGain from the PHP thin client, you must start at least one GridGain cluster node.

You can start a GridGain node from the command line using the default configuration or by passing a custom configuration file. You can start as many nodes as you like and they will all automatically discover each other.

Navigate into the `bin` folder of GridGain installation directory from the command shell. Your command might look like this:

{% tabs %}
{% tab title="Unix" %}

```shell
cd {gridgain}/bin/
```

{% endtab %}

{% tab title="Windows" %}

```shell
cd {gridgain}\bin\
```

{% endtab %}
{% endtabs %}

Start a node with a custom configuration file that is passed as a parameter to `ignite.sh|bat` like this:

{% tabs %}
{% tab title="Unix" %}

```shell
./ignite.sh ../examples/config/example-ignite.xml
```

{% endtab %}

{% tab title="Windows" %}

```shell
ignite.bat ..\examples\config\example-ignite.xml
```

{% endtab %}
{% endtabs %}

You will see output similar to this:

```
[08:53:45] Ignite node started OK (id=7b30bc8e)
[08:53:45] Topology snapshot [ver=1, locNode=7b30bc8e, servers=1, clients=0, state=ACTIVE, CPUs=4, offheap=1.6GB, heap=2.0GB]
```

Open another tab from your command shell and run the same command again:

{% tabs %}
{% tab title="Unix" %}

```shell
./ignite.sh ../examples/config/example-ignite.xml
```

{% endtab %}

{% tab title="Windows" %}

```shell
ignite.bat ..\examples\config\example-ignite.xml
```

{% endtab %}
{% endtabs %}

Check the `Topology snapshot` line in the output. Now you have a cluster of two server nodes with more CPUs and RAM available cluster-wide:

```
[08:54:34] Ignite node started OK (id=3a30b7a4)
[08:54:34] Topology snapshot [ver=2, locNode=3a30b7a4, servers=2, clients=0, state=ACTIVE, CPUs=4, offheap=3.2GB, heap=4.0GB]
```

{% hint style="info" %}
By default, `ignite.sh|bat` starts a node with the default configuration file: `config/default-config.xml`.
{% endhint %}

## Running Your First GridGain Application

Once at least one node is started, you can use the GridGain PHP Thin Client to perform cache operations. Archive installation of PHP Thin Client includes several ready-to-run PHP examples in the `{client_dir}/examples` directory. Here is example how to run one of them:

{% tabs %}
{% tab title="Unix" %}

```shell
cd {client_dir}/examples
php CachePutGetExample.php
```

{% endtab %}

{% tab title="Windows" %}

```shell
cd {client_dir}\examples
php CachePutGetExample.php
```

{% endtab %}
{% endtabs %}

Assuming that the server node is running locally, and that you have completed all of the pre-requisites listed above, here is a very simple *HelloWorld* example that puts and gets values from the cache. Note the `require_once` line — make sure the path is correct. If you followed the instructions above, and if you place this hello world example in your examples folder, it should work.

```php
<?php

require_once __DIR__ . '/../vendor/autoload.php';

use Apache\Ignite\Client;
use Apache\Ignite\ClientConfiguration;
use Apache\Ignite\Type\ObjectType;
use Apache\Ignite\Cache\CacheEntry;
use Apache\Ignite\Exception\ClientException;

function performCacheKeyValueOperations(): void
{
    $client = new Client();
    try {
        $client->connect(new ClientConfiguration('127.0.0.1:10800'));
        $cache = $client->getOrCreateCache('myCache')->
            setKeyType(ObjectType::INTEGER);

        // put and get value
        $cache->put(1, 'Hello World');
        $value = $cache->get(1);
        echo($value);
    } catch (ClientException $e) {
        echo($e->getMessage());
    } finally {
        $client->disconnect();
    }
}

performCacheKeyValueOperations();
```

## Next Steps

From here, you may want to:

* Read more about using GridGain
* Explore the [additional examples](https://github.com/gridgain/php-thin-client/tree/master/examples) included with GridGain
