Из compact в обычный вид
Недавно понадобилось протестировать собственный же анонсер, по всем критериям и один из них нормальная работа в compact режиме (т.е. пиров нам анонсер отдает в закодированном виде, что уменьшает в свою очередь трафик между сервером и клиентами).
Для того чтобы прекратить из compact в обычный вид написал функцию, которая до ужаса банальна, но работает:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | function peers_to_array($data) { if (!is_array($data['peers'])) { $new_peers = array(); while (strlen($data['peers']) > 0) { list(, $ip) = @unpack('N', substr($data['peers'], 0, 4)); list(, $port) = @unpack('n', substr($data['peers'], 4, 6)); $new_peers[] = array ( 'ip' => long2ip($ip), 'port' => $port ); $data['peers'] = substr($data['peers'], 6); } $data['peers'] = $new_peers; unset($new_peers); } return $data; } |
Как ее использовать я думаю объяснять не нужно.