# net-php Network Library for PHP with native Yggdrasil support ## Install `composer require yggverse/net` ## Usage ### Socket #### Check socket is open ``` php var_dump( \Yggverse\Net\Socket::isOpen('yo.index', 80) ); ``` #### Check host valid ``` php var_dump( \Yggverse\Net\Socket::isHost('yo.index') ); ``` #### Check port valid ``` php var_dump( \Yggverse\Net\Socket::isPort(80) ); ``` ### Dig #### Resolve records ``` php var_dump( \Yggverse\Net\Dig::records('yo.index', ['A', 'AAAA'], &$result = [], &$error = [], $provider = null, $timeout = 5) ); ``` #### Check hostname valid ``` php var_dump( \Yggverse\Net\Dig::isHostName('yo.index') ); ``` #### Check record valid ``` php var_dump( \Yggverse\Net\Dig::isRecord('A') ); ``` #### Check record value valid ``` php var_dump( \Yggverse\Net\Dig::isRecordValue('A', '127.0.0.1') ); ``` ### Resolve #### Init resolver ``` php $resolve = new \Yggverse\Net\Resolve( [ 'A', 'AAAA' ], [ '1.1.1.1', '8.8.8.8' ], // .. ); ``` #### Get resolved URL string ``` php $resolved = $resolve->url( 'https://en.wikipedia.org/wiki/Domain_Name_System' // next arguments contain debug variables and new address object ); if ($resolved) { var_dump( $resolved // https://185.15.59.224/wiki/Domain_Name_System ); } ``` #### Resolve Address object ``` php $resolved = $resolve->address( new \Yggverse\Net\Address( 'https://en.wikipedia.org/wiki/Domain_Name_System' ) ); if ($resolved) { var_dump( $resolved->get() // https://185.15.59.224/wiki/Domain_Name_System ); var_dump( $resolved->getHost() // 185.15.59.224 ); } ``` ### Address Includes methods to work with network addresses. #### Base address methods Different operations with address parts: * `scheme` * `user` * `password` * `host` * `protocol` * `path` * `query` * `fragment` #### Address conversion from relative to absolute format **Document root** ``` php $base = new \Yggverse\Net\Address( 'http://yo.ygg/a1/b1/c1' ); $address = new \Yggverse\Net\Address( '/a2' ); var_dump( $address->getAbsolute( $base ) // return http://yo.ygg/a2 ); ``` **Current folder** ``` php $base = new \Yggverse\Net\Address( 'http://yo.ygg/a1/b1/c1' ); $address = new \Yggverse\Net\Address( 'c2' ); var_dump( $address->getAbsolute( $base ) // return http://yo.ygg/a1/b1/c2 ); ``` **Ending slash** ``` php $base = new \Yggverse\Net\Address( 'http://yo.ygg/a1/b1/c1/' ); $address = new \Yggverse\Net\Address( '../../b2/c2' ); var_dump( $address->getAbsolute( $base ) // return http://yo.ygg/a1/b2/c2 ); ``` **All options** ``` php $base = new \Yggverse\Net\Address( 'http://user:password@yo.ygg/a1/b1/c1?attribute=value#anchor' ); $address = new \Yggverse\Net\Address( '../../a2/b2?attribute2=value2#anchor2' ); var_dump( $address->getAbsolute( $base ) // return http://user:password@yo.ygg/a2/b2?attribute2=value2#anchor2 ); ``` ### Valid Network entities validation **Supported methods** * `Valid::ip` * `Valid::ip4` * `Valid::ip6` * `Valid::domainHostName` ## Integrations * [web-api](https://github.com/YGGverse/web-api) - Network API with native Yggdrasil/IPv6 support * [Yo!](https://github.com/YGGverse/Yo) - Crawler and search engine for different networks * [Yoda](https://github.com/YGGverse/Yoda) - Experimental PHP-GTK browser for Gemini protocol * [gemini-dl](https://github.com/YGGverse/gemini-dl) - CLI downloader for Gemini protocol