PHPackages                             zorac/influxdb-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. zorac/influxdb-php

ActiveLibrary[Database &amp; ORM](/categories/database)

zorac/influxdb-php
==================

InfluxDB client library for PHP

1.16.0(8mo ago)0969—6.7%MITPHPPHP ^8.1

Since Mar 8Pushed 8mo ago1 watchersCompare

[ Source](https://github.com/zorac/influxdb-php)[ Packagist](https://packagist.org/packages/zorac/influxdb-php)[ RSS](/packages/zorac-influxdb-php/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (3)Versions (7)Used By (0)

influxdb-php
============

[](#influxdb-php)

InfluxDB client library for PHP
-------------------------------

[](#influxdb-client-library-for-php)

#### Note: This library is for use with InfluxDB 1.x. For connecting to InfluxDB 2.x instances, please use the [influxdb-client-php](https://github.com/influxdata/influxdb-client-php) client.

[](#note-this-library-is-for-use-with-influxdb-1x-for-connecting-to-influxdb-2x-instances-please-use-the-influxdb-client-php-client)

This library has been archived by InfluxData as per [influxdata#171](https://github.com/influxdata/influxdb-php/issues/171). I'm maintaining this fork solely for fixes/updates needed by projects I work on.

### Overview

[](#overview)

A easy to use library for using InfluxDB with PHP. This fork maintained by [@zorac](https://github.com/zorac). Previously maintained by [@thecodeassassin](https://github.com/thecodeassassin), [@gianarb](https://github.com/gianarb).

The influxdb-php library was created to have php port of the python influxdb client. This way there will be a common abstraction library between different programming languages.

### Installation

[](#installation)

Installation can be done with composer:

```
$ composer require zorac/influxdb-php
```

### Getting started

[](#getting-started)

Initialize a new client object:

```
$client = new InfluxDB\Client($host, $port);
```

This will create a new client object which you can use to read and write points to InfluxDB.

It's also possible to create a client from a DSN (Data Source Name):

```
// directly get the database object
$database = InfluxDB\Client::fromDSN(sprintf('influxdb://user:pass@%s:%s/%s', $host, $port, $dbname));

// get the client to retrieve other databases
$client = $database->getClient();
```

**Important:** don't forget to `urlencode()` the password (and username for that matter) when using a DSN, especially if it contains non-alphanumeric characters. Not doing so might cause exceptions to be thrown.

### Reading data

[](#reading-data)

To fetch records from InfluxDB you can do a query directly on a database:

```
// fetch the database
$database = $client->selectDB('influx_test_db');

// executing a query will yield a resultset object
$result = $database->query('select * from test_metric LIMIT 5');

// get the points from the resultset yields an array
$points = $result->getPoints();
```

It's also possible to use the QueryBuilder object. This is a class that simplifies the process of building queries.

```
// retrieve points with the query builder
$result = $database->getQueryBuilder()
	->select('cpucount')
	->from('test_metric')
	->limit(2)
	->offset(2)
	->getResultSet()
	->getPoints();

// get the query from the QueryBuilder
$query = $database->getQueryBuilder()
	->select('cpucount')
	->from('test_metric')
	->where(["region = 'us-west'"])
	->getQuery();
```

Make sure that you enter single quotes when doing a where query on strings; otherwise InfluxDB will return an empty result.

You can get the last executed query from the client:

```
// use the getLastQuery() method
$lastQuery = $client->getLastQuery();

// or access the static variable directly:
$lastQuery = Client::lastQuery;
```

### Reading data using a timeout

[](#reading-data-using-a-timeout)

In production if you are querying InfluxDB to generate a response to a web or API request, you may want to set a specific timeout for InfluxDB calls rather than the default of letting them run indefinitely.

```
// Fetch the database using a 5 second time out
$database = InfluxDB\Client::fromDSN(sprintf('influxdb://user:pass@%s:%s/%s', $host, $port, $dbname), 5);
```

### Writing data

[](#writing-data)

Writing data is done by providing an array of points to the writePoints method on a database:

```
// create an array of points
$points = array(
	new Point(
		'test_metric', // name of the measurement
		0.64, // the measurement value
		['host' => 'server01', 'region' => 'us-west'], // optional tags
		['cpucount' => 10], // optional additional fields
		1435255849 // Time precision has to be set to seconds!
	),
    new Point(
    	'test_metric', // name of the measurement
		0.84, // the measurement value
		['host' => 'server01', 'region' => 'us-west'], // optional tags
		['cpucount' => 10], // optional additional fields
		1435255849 // Time precision has to be set to seconds!
	)
);

// we are writing unix timestamps, which have a second precision
$result = $database->writePoints($points, Database::PRECISION_SECONDS);
```

It's possible to add multiple [fields](https://docs.influxdata.com/influxdb/latest/concepts/key_concepts/) when writing measurements to InfluxDB. The point class allows one to easily write data in batches to influxDB.

The name of a measurement and the value are mandatory. Additional fields, tags and a timestamp are optional. InfluxDB takes the current time as the default timestamp.

You can also write multiple fields to a measurement without specifying a value:

```
$points = [
	new Point(
		'instance', // the name of the measurement
		null, // measurement value
		['host' => 'server01', 'region' => 'us-west'], // measurement tags
		['cpucount' => 10, 'free' => 1], // measurement fields
		exec('date +%s%N') // timestamp in nanoseconds on Linux ONLY
	),
	new Point(
		'instance', // the name of the measurement
		null, // measurement value
		['host' => 'server01', 'region' => 'us-west'], // measurement tags
		['cpucount' => 10, 'free' => 2], // measurement fields
		exec('date +%s%N') // timestamp in nanoseconds on Linux ONLY
	)
];
```

#### Writing data using udp

[](#writing-data-using-udp)

First, set your InfluxDB host to support incoming UDP sockets:

```
[udp]
  enabled = true
  bind-address = ":4444"
  database = "test_db"
```

Then, configure the UDP driver in the client:

```
// set the UDP driver in the client
$client->setDriver(new \InfluxDB\Driver\UDP($client->getHost(), 4444));

$points = [
	new Point(
		'test_metric',
		0.84,
		['host' => 'server01', 'region' => 'us-west'],
		['cpucount' => 10],
		exec('date +%s%N') // this will produce a nanosecond timestamp on Linux ONLY
	)
];

// now just write your points like you normally would
$result = $database->writePoints($points);
```

Or simply use a DSN (Data Source Name) to send metrics using UDP:

```
// get a database object using a DSN (Data Source Name)
$database = \InfluxDB\Client::fromDSN('udp+influxdb://username:pass@localhost:4444/test123');

// write your points
$result = $database->writePoints($points);
```

*Note:* It is import to note that precision will be *ignored* when you use UDP. You should always use nanosecond precision when writing data to InfluxDB using UDP.

#### Timestamp precision

[](#timestamp-precision)

It's important to provide the correct precision when adding a timestamp to a Point object. This is because if you specify a timestamp in seconds and the default (nanosecond) precision is set; the entered timestamp will be invalid.

```
// Points will require a nanosecond precision (this is default as per influxdb standard)
$newPoints = $database->writePoints($points);

// Points will require second precision
$newPoints = $database->writePoints($points, Database::PRECISION_SECONDS);

// Points will require microsecond precision
$newPoints = $database->writePoints($points, Database::PRECISION_MICROSECONDS);
```

Please note that `exec('date + %s%N')` does NOT work under MacOS; you can use PHP's `microtime` to get a timestamp with microsecond precision, like such:

```
list($usec, $sec) = explode(' ', microtime());
$timestamp = sprintf('%d%06d', $sec, $usec*1000000);
```

### Creating databases

[](#creating-databases)

When creating a database a default retention policy is added. This retention policy does not have a duration so the data will be flushed with the memory.

This library makes it easy to provide a retention policy when creating a database:

```
// create the client
$client = new \InfluxDB\Client($host, $port, '', '');

// select the database
$database = $client->selectDB('influx_test_db');

// create the database with a retention policy
$result = $database->create(new RetentionPolicy('test', '5d', 1, true));

// check if a database exists then create it if it doesn't
$database = $client->selectDB('test_db');

if (!$database->exists()) {
	$database->create(new RetentionPolicy('test', '1d', 2, true));
}
```

You can also alter retention policies:

```
$database->alterRetentionPolicy(new RetentionPolicy('test', '2d', 5, true));
```

and list them:

```
$result = $database->listRetentionPolicies();
```

You can add more retention policies to a database:

```
$result = $database->createRetentionPolicy(new RetentionPolicy('test2', '30d', 1, true));
```

### Client functions

[](#client-functions)

Some functions are too general for a database. So these are available in the client:

```
// list users
$result = $client->listUsers();

// list databases
$result = $client->listDatabases();
```

### Admin functionality

[](#admin-functionality)

You can use the client's $client-&gt;admin functionality to administer InfluxDB via the API.

```
// add a new user without privileges
$client->admin->createUser('testuser123', 'testpassword');

// add a new user with ALL cluster-wide privileges
$client->admin->createUser('admin_user', 'password', \InfluxDB\Client\Admin::PRIVILEGE_ALL);

// drop user testuser123
$client->admin->dropUser('testuser123');
```

List all the users:

```
// show a list of all users
$results = $client->admin->showUsers();

// show users returns a ResultSet object
$users = $results->getPoints();
```

#### Granting and revoking privileges

[](#granting-and-revoking-privileges)

Granting permissions can be done on both the database level and cluster-wide. To grant a user specific privileges on a database, provide a database object or a database name.

```
// grant permissions using a database object
$database = $client->selectDB('test_db');
$client->admin->grant(\InfluxDB\Client\Admin::PRIVILEGE_READ, 'testuser123', $database);

// give user testuser123 read privileges on database test_db
$client->admin->grant(\InfluxDB\Client\Admin::PRIVILEGE_READ, 'testuser123', 'test_db');

// revoke user testuser123's read privileges on database test_db
$client->admin->revoke(\InfluxDB\Client\Admin::PRIVILEGE_READ, 'testuser123', 'test_db');

// grant a user cluster-wide privileges
$client->admin->grant(\InfluxDB\Client\Admin::PRIVILEGE_READ, 'testuser123');

// Revoke an admin's cluster-wide privileges
$client->admin->revoke(\InfluxDB\Client\Admin::PRIVILEGE_ALL, 'admin_user');
```

Todo
----

[](#todo)

- More unit tests
- Increase documentation (wiki?)
- Add more features to the query builder
- Add validation to RetentionPolicy

Changelog
---------

[](#changelog)

#### 1.16.0

[](#1160)

- Removed support for PHP &lt; 8.1, Guzzle &lt; 7
- Fixed compatibility issues for PHP 8.4
- Removed deprecated `createIfNotExists` arg to `Database::create`
- Fixed an issue with backslahses in point values

#### 1.15.0

[](#1150)

- Added cURL driver support #122 (thanks @aldas)
- Improved query error message #129 (thanks @andreasanta)

#### 1.14.8

[](#1148)

- Merged #122

#### 1.14.7

[](#1147)

- Added offset in QueryBuilder (thanks @lifekent and @BentCoder)

#### 1.14.6

[](#1146)

- dependencies update (#97), by @aldas
- Adding timeout information. (#103), by @NickBusey
- Add ability to specify connect\_timeout for guzzle (#105), by @brycefranzen

#### 1.14.5

[](#1145)

- Update key concepts link to point to the proper place.
- Replace costly array\_merge calls with foreach + array operator
- Add getter method for verifySSL
- Support for Symfony 4

#### 1.14.3

[](#1143)

- Deprecate IF NOT EXISTS clause in database creation

#### 1.14.2

[](#1142)

- Fix Notice when calling InfluxDB\\Client::fromDSN without username or password
- fixed Guzzle client timeout is float
- Fix annotation
- Remove unused property
- Fixed misspelling
- Fixed tag with Boolean/Null value trigger parse error

#### 1.4.1

[](#141)

- Fixed bug: Escape field values as per line protocol.

#### 1.4.0

[](#140)

- Updating Influx Database with support for writing direct payloads, thanks @virgofx

#### 1.3.1

[](#131)

- Added ability to write data to a specific retention policy, thanks @virgofx !

#### 1.3.0

[](#130)

- Added quoting of dbname in queries
- Added orderBy to query builder
- Fixed wrong orderby tests
- Travis container-infra and php 7

#### 1.2.2

[](#122)

- Fixed issue with listUsers() method
- Added more unit tests
- Added getColumns method to \\InfluxDB\\ResultSet

#### 1.2.0

[](#120)

- Added support for 32 bit systems
- Added setters/getters for Point fields

#### 1.1.3

[](#113)

- Added support for symfony3

#### 1.1.2

[](#112)

- Fixed issue with authentication when writing data

#### 1.1.1

[](#111)

- Added support for 0.9.4
- Added if not exists support to database-&gt;create()
- Added getLastQuery method

#### 1.1.0

[](#110)

- Added support for 0.9.3 rc2
- Changed the way we handle the datatypes of values
- Changed list retention policies to reflect the changes in 0.9.3

#### 1.0.1

[](#101)

- Added support for authentication in the guzzle driver
- Added admin functionality

#### 1.0.0

[](#100)

- -BREAKING CHANGE- Dropped support for PHP 5.3 and PHP 5.4
- Allowing for custom drivers
- UDP support

#### 0.1.2

[](#012)

- Added exists method to Database class
- Added time precision to database class

#### 0.1.1

[](#011)

- Merged repository to influxdb/influxdb-php
- Added unit test for createRetentionPolicy
- -BREAKING CHANGE- changed $client-&gt;db to $client-&gt;selectDB

###  Health Score

45

—

FairBetter than 93% of packages

Maintenance60

Regular maintenance activity

Popularity18

Limited adoption so far

Community20

Small or concentrated contributor base

Maturity73

Established project with proven stability

 Bus Factor4

4 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~474 days

Recently: every ~571 days

Total

6

Last Release

255d ago

PHP version history (3 changes)1.14.7.1PHP ^5.5 || ^7.0

1.15.1.2PHP ^5.5 || ^7.0 || ^8.0

1.16.0PHP ^8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/2768ebe682a76e86ee591ffccbf100c4f2927c61bce46a955cbf7444585ededa?d=identicon)[zorac](/maintainers/zorac)

---

Top Contributors

[![gianarb](https://avatars.githubusercontent.com/u/1630267?v=4)](https://github.com/gianarb "gianarb (26 commits)")[![danibrutal](https://avatars.githubusercontent.com/u/684319?v=4)](https://github.com/danibrutal "danibrutal (16 commits)")[![zorac](https://avatars.githubusercontent.com/u/1845517?v=4)](https://github.com/zorac "zorac (14 commits)")[![thecodeassassin](https://avatars.githubusercontent.com/u/939775?v=4)](https://github.com/thecodeassassin "thecodeassassin (12 commits)")[![andreyvital](https://avatars.githubusercontent.com/u/967317?v=4)](https://github.com/andreyvital "andreyvital (9 commits)")[![Nyholm](https://avatars.githubusercontent.com/u/1275206?v=4)](https://github.com/Nyholm "Nyholm (9 commits)")[![aldas](https://avatars.githubusercontent.com/u/2320301?v=4)](https://github.com/aldas "aldas (5 commits)")[![skazi0](https://avatars.githubusercontent.com/u/2458112?v=4)](https://github.com/skazi0 "skazi0 (5 commits)")[![eugenegp](https://avatars.githubusercontent.com/u/1913985?v=4)](https://github.com/eugenegp "eugenegp (3 commits)")[![lifekent](https://avatars.githubusercontent.com/u/823056?v=4)](https://github.com/lifekent "lifekent (3 commits)")[![mermetbt](https://avatars.githubusercontent.com/u/711667?v=4)](https://github.com/mermetbt "mermetbt (3 commits)")[![enumag](https://avatars.githubusercontent.com/u/539462?v=4)](https://github.com/enumag "enumag (2 commits)")[![iGusev](https://avatars.githubusercontent.com/u/1555767?v=4)](https://github.com/iGusev "iGusev (2 commits)")[![jdstrand](https://avatars.githubusercontent.com/u/1663079?v=4)](https://github.com/jdstrand "jdstrand (2 commits)")[![clwells](https://avatars.githubusercontent.com/u/8984720?v=4)](https://github.com/clwells "clwells (2 commits)")[![pauldix](https://avatars.githubusercontent.com/u/4331?v=4)](https://github.com/pauldix "pauldix (2 commits)")[![pdelre](https://avatars.githubusercontent.com/u/1379248?v=4)](https://github.com/pdelre "pdelre (2 commits)")[![pprkut](https://avatars.githubusercontent.com/u/56635?v=4)](https://github.com/pprkut "pprkut (2 commits)")[![beckettsean](https://avatars.githubusercontent.com/u/6537329?v=4)](https://github.com/beckettsean "beckettsean (2 commits)")[![stefanotorresi](https://avatars.githubusercontent.com/u/2952427?v=4)](https://github.com/stefanotorresi "stefanotorresi (1 commits)")

---

Tags

clientinfluxdbtime seriesinfluxdb clientinfluxdb classinfluxdb libraryinfluxdata

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/zorac-influxdb-php/health.svg)

```
[![Health](https://phpackages.com/badges/zorac-influxdb-php/health.svg)](https://phpackages.com/packages/zorac-influxdb-php)
```

###  Alternatives

[clue/redis-react

Async Redis client implementation, built on top of ReactPHP.

28210.5M45](/packages/clue-redis-react)[phpbu/phpbu

PHP Backup utility.

1.3k89.0k4](/packages/phpbu-phpbu)[influxdata/influxdb-client-php

InfluxDB (v2+) Client Library for PHP

1662.6M23](/packages/influxdata-influxdb-client-php)[basho/riak

Official Riak client for PHP

159246.7k7](/packages/basho-riak)[probots-io/pinecone-php

Unofficial PHP Client for Pinecone Vector Database (pinecone.io)

75414.1k6](/packages/probots-io-pinecone-php)[tarantool/client

PHP client for Tarantool.

67430.7k21](/packages/tarantool-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
