PHPackages                             acl-solution/rh-dependency - 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. acl-solution/rh-dependency

ActiveLibrary

acl-solution/rh-dependency
==========================

Private Dependency

v1.0.11(3y ago)024MITPHPPHP &gt;=7.4

Since Jul 8Pushed 3y ago1 watchersCompare

[ Source](https://github.com/acl-solution/rh-dependancy)[ Packagist](https://packagist.org/packages/acl-solution/rh-dependency)[ RSS](/packages/acl-solution-rh-dependency/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (13)Used By (0)

RH Dependency SDK
=================

[](#rh-dependency-sdk)

Private Dependency

Installation
------------

[](#installation)

This package is installed using Composer. You can use the following command to add it to a project.

```
composer require acl-solution/rh-dependency
composer update
```

WHMCS Usage
-----------

[](#whmcs-usage)

This API client encapsulates the WHMCS with a simple OO wrapper.

First, you need to create a client instance with the details of your WHMCS installation:

```
$api = new \ACL\RH\Dependency\Provider('https://example.com/whmcs/installation/url/', 'myusername', 'mypassword');
```

Note the trailing `/` in the URL. The username and password are the credentials of a user with the "API Access" permission. You can use your main admin user for this, but for security it's recommended to create a special API user for every project.

After creating the client, you can start to send a request. The methods correspond to the action names from [the WHMCS API](https://developers.whmcs.com/api/api-index/), the other attributes can be submitted as an array.

For example, to execute the "AcceptOrder" action, you could use the following code.

```
try {
    $result = $api->acceptOrder([
        'orderid' => 123,
        'serverid' => 456,
        //...
    ]);
} catch (\HansAdema\WhmcsSdk\RequestException $e) {
    echo "Error connecting to WHMCS: ".$e->getMessage();
} catch (\HansAdema\WhmcsSdk\ResponseException $e) {
    echo "There was an issue with your API call: ".$e->getMessage();
}
```

Note that two different types of exceptions are being used here. The `RequestException` is used whenever there is a problem connecting to your WHMCS installation, for example because the installation is down or the credentials are not correct. The `ResponseException` is thrown whenever the API result was not successful, for example due to missing or invalid method parameters.

#### Quick Start

[](#quick-start)

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

use ipinfo\ipinfo\IPinfo;

$access_token = '123456789abc';
$client = new IPinfo($access_token);
$ip_address = '216.239.36.21';
$details = $client->getDetails($ip_address);

$details->city; // Emeryville
$details->loc; // 37.8342,-122.2900
```

### Usage

[](#usage)

The `IPinfo->getDetails()` method accepts an IP address as an optional, positional argument. If no IP address is specified, the API will return data for the IP address from which it receives the request.

```
$client = new IPinfo();
$ip_address = '216.239.36.21';
$details = $client->getDetails($ip_address);
$details->city; // Emeryville
$details->loc; // 37.8342,-122.2900
```

### Authentication

[](#authentication)

The IPinfo library can be authenticated with your IPinfo API token, which is passed in as a positional argument. It also works without an authentication token, but in a more limited capacity.

```
$access_token = '123456789abc';
$client = new IPinfo($access_token);
```

### Details Data

[](#details-data)

`IPinfo->getDetails()` will return a `Details` object that contains all fields listed [IPinfo developer docs](https://ipinfo.io/developers/responses#full-response) with a few minor additions. Properties can be accessed directly.

```
$details->hostname; // cpe-104-175-221-247.socal.res.rr.com
```

#### Country Name

[](#country-name)

`Details->country_name` will return the country name, as supplied by the `countries.json` file. See below for instructions on changing that file for use with non-English languages. `Details->country` will still return country code.

```
$details->country; // US
$details->country_name; // United States
```

#### Longitude and Latitude

[](#longitude-and-latitude)

`Details->latitude` and `Details->longitude` will return latitude and longitude, respectively, as strings. `Details->loc` will still return a composite string of both values.

```
$details->loc; // 34.0293,-118.3570
$details->latitude; // 34.0293
$details->longitude; // -118.3570
```

#### Accessing all properties

[](#accessing-all-properties)

`Details->all` will return all details data as a dictionary.

```
$details->all;
/*
    {
    'asn': {  'asn': 'AS20001',
               'domain': 'twcable.com',
               'name': 'Time Warner Cable Internet LLC',
               'route': '104.172.0.0/14',
               'type': 'isp'},
    'city': 'Los Angeles',
    'company': {   'domain': 'twcable.com',
                   'name': 'Time Warner Cable Internet LLC',
                   'type': 'isp'},
    'country': 'US',
    'country_name': 'United States',
    'hostname': 'cpe-104-175-221-247.socal.res.rr.com',
    'ip': '104.175.221.247',
    'loc': '34.0293,-118.3570',
    'latitude': '34.0293',
    'longitude': '-118.3570',
    'phone': '323',
    'postal': '90016',
    'region': 'California'
    }
*/
```

### Caching

[](#caching)

In-memory caching of `Details` data is provided by default via the [sabre/cache](https://github.com/sabre-io/cache/) library. LRU (least recently used) cache-invalidation functionality has been added to the default TTL (time to live). This means that values will be cached for the specified duration; if the cache's max size is reached, cache values will be invalidated as necessary, starting with the oldest cached value.

#### Modifying cache options

[](#modifying-cache-options)

Default cache TTL and maximum size can be changed by setting values in the `$settings` argument array.

- Default maximum cache size: 4096 (multiples of 2 are recommended to increase efficiency)
- Default TTL: 24 hours (in seconds)

```
$access_token = '123456789abc';
$settings = ['cache_maxsize' => 30, 'cache_ttl' => 128];
$client = new IPinfo($access_token, $settings);
```

#### Using a different cache

[](#using-a-different-cache)

It's possible to use a custom cache by creating a child class of the [CacheInterface](https://github.com/ipinfo/php/blob/master/src/cache/Interface.php) class and passing this into the handler object with the `cache` keyword argument. FYI this is known as [the Strategy Pattern](https://sourcemaking.com/design_patterns/strategy).

```
$access_token = '123456789abc';
$settings = ['cache' => $my_fancy_custom_cache];
$client = new IPinfo($access_token, $settings);
```

#### Disabling the cache

[](#disabling-the-cache)

You may disable the cache by passing in a `cache_disabled` key in the settings:

```
$access_token = '123456789abc';
$settings = ['cache_disabled' => true];
$client = new IPinfo($access_token, $settings);
```

### Overriding HTTP Client options

[](#overriding-http-client-options)

The IPinfo client constructor accepts a `timeout` key which is the request timeout in seconds.

For full flexibility, a `guzzle_opts` key is accepted which accepts an associative array which is described in [Guzzle Request Options](https://docs.guzzlephp.org/en/stable/request-options.html). Options set here will override any custom settings set by the IPinfo client internally in case of conflict, including headers.

### Batch Operations

[](#batch-operations)

Looking up a single IP at a time can be slow. It could be done concurrently from the client side, but IPinfo supports a batch endpoint to allow you to group together IPs and let us handle retrieving details for them in bulk for you.

```
$access_token = '123456789abc';
$client = new IPinfo($access_token);
$ips = ['1.1.1.1', '8.8.8.8', '1.2.3.4/country'];
$results = $client->getBatchDetails($ips);
echo $results['1.2.3.4/country']; // AU
var_dump($results['1.1.1.1']);
var_dump($results['8.8.8.8']);
```

The input size is not limited, as the interface will chunk operations for you behind the scenes.

Please see [the official documentation](https://ipinfo.io/developers/batch) for more information and limitations.

### Internationalization

[](#internationalization)

When looking up an IP address, the response object includes a `Details->country_name` attribute which includes the country name based on American English. It is possible to return the country name in other languages by setting the `countries_file` keyword argument when creating the `IPinfo` object.

The file must be a `.json` file with the following structure:

```
{
 "BD": "Bangladesh",
 "BE": "Belgium",
 "BF": "Burkina Faso",
 "BG": "Bulgaria"
 ...
}
```

Available Methods
-----------------

[](#available-methods)

Available methods in this library:

### - Get user's IP:

[](#--get-users-ip)

```
Ip::get();
```

**\# Return** (string|false) → user IP or false

### - Validate IP:

[](#--validate-ip)

```
Ip::validate($ip);
```

AttributeDescriptionTypeRequiredDefault$ipIP address to be validated.stringYes**\# Return** (boolean)

Quick Start
-----------

[](#quick-start-1)

To use this library with **Composer**:

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

use ACL\RH\Dependency\Ip;
```

Usage
-----

[](#usage-1)

Example of use for this library:

### - Get user's IP:

[](#--get-users-ip-1)

```
Ip::get();
```

### - Validate IP:

[](#--validate-ip-1)

```
$ip = Ip::get();

Ip::validate($ip);
```

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 93.8% of commits — single point of failure

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 ~0 days

Total

12

Last Release

1404d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8b647e80cb1599850a502f9cbc332f4f4990c191c62274a96be6d52818e8b989?d=identicon)[acl-solution](/maintainers/acl-solution)

---

Top Contributors

[![acl-solution](https://avatars.githubusercontent.com/u/108955980?v=4)](https://github.com/acl-solution "acl-solution (15 commits)")[![imdrashedul](https://avatars.githubusercontent.com/u/34345014?v=4)](https://github.com/imdrashedul "imdrashedul (1 commits)")

### Embed Badge

![Health badge](/badges/acl-solution-rh-dependency/health.svg)

```
[![Health](https://phpackages.com/badges/acl-solution-rh-dependency/health.svg)](https://phpackages.com/packages/acl-solution-rh-dependency)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.6k509.9M17.0k](/packages/laravel-framework)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)[tempest/framework

The PHP framework that gets out of your way.

2.1k23.1k9](/packages/tempest-framework)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[ec-cube/ec-cube

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)

PHPackages © 2026

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