You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
1.8 KiB
96 lines
1.8 KiB
<?php |
|
/** |
|
* Format converter |
|
*/ |
|
|
|
declare(strict_types=1); |
|
|
|
namespace PhpMyAdmin\Utils; |
|
|
|
use PhpMyAdmin\Util; |
|
|
|
use function bin2hex; |
|
use function hex2bin; |
|
use function inet_ntop; |
|
use function inet_pton; |
|
use function ip2long; |
|
use function long2ip; |
|
use function strpos; |
|
use function substr; |
|
|
|
/** |
|
* Format converter |
|
*/ |
|
class FormatConverter |
|
{ |
|
/** |
|
* Transforms a binary to an IP |
|
* |
|
* @param mixed $buffer Data to transform |
|
* |
|
* @return false|string |
|
*/ |
|
public static function binaryToIp($buffer, bool $isBinary) |
|
{ |
|
if (strpos($buffer, '0x') !== 0) { |
|
return $isBinary ? bin2hex($buffer) : $buffer; |
|
} |
|
|
|
$ipHex = substr($buffer, 2); |
|
$ipBin = hex2bin($ipHex); |
|
|
|
if ($ipBin === false) { |
|
return $buffer; |
|
} |
|
|
|
return @inet_ntop($ipBin); |
|
} |
|
|
|
/** |
|
* Transforms an IP to a binary |
|
* |
|
* @param mixed $buffer Data to transform |
|
* |
|
* @return string |
|
*/ |
|
public static function ipToBinary($buffer) |
|
{ |
|
$val = @inet_pton($buffer); |
|
if ($val !== false) { |
|
return '0x' . bin2hex($val); |
|
} |
|
|
|
return $buffer; |
|
} |
|
|
|
/** |
|
* Transforms an IP to a long |
|
* |
|
* @param string $buffer Data to transform |
|
* |
|
* @return int|string |
|
*/ |
|
public static function ipToLong(string $buffer) |
|
{ |
|
$ipLong = ip2long($buffer); |
|
if ($ipLong === false) { |
|
return $buffer; |
|
} |
|
|
|
return $ipLong; |
|
} |
|
|
|
/** |
|
* Transforms a long to an IP |
|
* |
|
* @param mixed $buffer Data to transform |
|
*/ |
|
public static function longToIp($buffer): string |
|
{ |
|
if (! Util::isInteger($buffer) || $buffer < 0 || $buffer > 4294967295) { |
|
return $buffer; |
|
} |
|
|
|
return (string) long2ip((int) $buffer); |
|
} |
|
}
|
|
|