Всё должно работать нормально.
Вот так читабельнее:
<?php
file_put_contents(
'output',
join(
PHP_EOL,
array_map(
function ($sInput) {
list($ip, $mask) = explode('/', trim($sInput));
return substr(str_pad(decbin(ip2long($ip)), 32, 0, STR_PAD_LEFT), 0, $mask);
},
file('input', FILE_SKIP_EMPTY_LINES))
)
);
?>
Начну разбор с
array_map:
Эта функция применяет другую функцию(тавтология, ну и пусть) к каждому элементу массива.
Т.е. скрипт считывает массив строк в фаиле
input, и к каждои строке применяет анонимную функцию, которая определяет ip(
$ip) и маску(
$mask), потом вырезает(
substring) сам ip переводит в двоичныи код и доводит длину строки до 32 символов(
strpad), заполняя ведущими нулями.
После array_map получается массив из ip в двоичном виде.
Потом функциеи join(то же, что implode()) объединяет массив в строку, разделяя элементы переносов строки(константа
PHP_EOL).
И пишет эту стоку в фаил
output методом
file_put_contents