$ ip_2 không phải là một địa chỉ IPv6 hợp lệ. Bạn cần "::" ở đâu đó trong đó, để chỉ ra điểm không thiếu sót.
Nếu bạn có nó là một trong những
$ip_2='2001::11ff:ffff:f';
$ip_2='2001:11ff::ffff:f';
$ip_2='2001:11ff:ffff::f';
sau đó inet_pton() nên hoạt động tốt.
Như đã gợi ý, PHP không có loại 128 nguyên, do đó, tốt nhất bạn có thể nhận được là một chuỗi số trong số chuỗi nhị phân inet_pton() cung cấp cho bạn ... vâng, đó là nó là gì, và đó là lý do tại sao nó trông kỳ lạ. Nếu bạn nhìn vào các bit của chuỗi đó, bạn sẽ thấy chúng chính xác như những gì bạn mong đợi.
Dưới đây là làm thế nào để mở rộng chuỗi nhị phân thành một chuỗi số (argument "0" đã mất tích từ str_pad() ban đầu):
/**
* @param string $ip A human readable IPv4 or IPv6 address.
* @return string Decimal number, written out as a string due to limits on the size of int and float.
*/
function ipv6_numeric($ip) {
$binNum = '';
foreach (unpack('C*', inet_pton($ip)) as $byte) {
$binNum .= str_pad(decbin($byte), 8, "0", STR_PAD_LEFT);
}
return base_convert(ltrim($binNum, '0'), 2, 10);
}
Nguồn
2013-08-16 15:38:54
đầu ra bạn đang nhận được, bất kỳ lỗi gì? – Halcyon
PHP có một kiểu dữ liệu 128-bit không? – SLaks
Lần đầu tiên tôi nhận được văn bản lạ thứ hai một nén tôi nhận được lỗi – Ben