darsyn / ip
An immutable IP Address value object that provides several different notations, including helper functions.
Installs: 1 362 012
Dependents: 10
Suggesters: 0
Security: 0
Stars: 244
Watchers: 10
Forks: 20
Open Issues: 2
Requires
- php-64bit: >=5.6
- php-ipv6: >=5.6
Requires (Dev)
- ext-pdo: *
- doctrine/dbal: ^2.3
- phpunit/phpunit: *
Suggests
- doctrine/dbal: to use IP as a column type
This package is auto-updated.
Last update: 2024-04-02 09:52:39 UTC
README
IP is an immutable value object for (both version 4 and 6) IP addresses. Several helper methods are provided for ranges, broadcast and network addresses, subnet masks, whether an IP is a certain type (defined by RFC's), etc.
This project aims for simplicity of use and any contribution towards that goal - whether a bug report, modifications to the codebase, or an improvement to the accuracy or readability of the documentation - are always welcome.
Documentation
Full documentation is available in the docs/
folder.
Compatibility
This library has extensive test coverage using PHPUnit on PHP versions: 5.6
,
7.0
, 7.1
, 7.2
, 7.3
, 7.4
, 8.0
, 8.1
, 8.2
, and 8.3
.
Static analysis is performed with PHPStan at max
level on PHP 8.3
, using
both core and deprecation rules.
The Doctrine features included in this library are compatible with Doctrine DBAL
^2.3 || ^3.0
. This is not enforced via Composer (in case you want to use
this library in a project that uses Doctrine DBAL 4+
without using the
Doctrine features this library provides).
Brief Example
- There are three main classes:
IPv4
,IPv6
, andMulti
(for both version 4 and 6 addresses). - Objects are created using a static factory method
IpInterface::factory()
instead of the constructor to speed up internal processes. - When using
Multi
, the default strategy for representing version 4 addresses internally is IPv4-mapped.
<?php declare(strict_types=1); use Darsyn\IP\Exception; use Darsyn\IP\Version\IPv4; try { $ip = IPv4::factory('192.168.0.1'); } catch (Exception\InvalidIpAddressException $e) { exit('The IP address supplied is invalid!'); } $companyNetwork = IPv4::factory('216.58.198.174'); if (!$ip->inRange($companyNetwork, 25)) { throw new \Exception('Request not from a known company IP address.'); } // Is it coming from the local network? if (!$ip->isPrivateUse()) { record_visit($ip->getBinary(), $_SERVER['HTTP_USER_AGENT']); }
Code of Conduct
This project includes and adheres to the Contributor Covenant as a Code of Conduct.
License
Please see the separate license file included in this repository for a full copy of the MIT license, which this project is licensed under.
Authors
If you make a contribution (submit a pull request), don't forget to add your name here!