Функция парсера (пример)
Код: Выделить всё
function parse_torrent($s) {
static $str;
$str = $s;
//echo $str{0};
if ($str{0} == 'd') {
$str = substr($str,1);
$ret = array();
while (strlen($str) && $str{0} != 'e') {
$key = parse_torrent($str);
if (strlen($str) == strlen($s)) break;
if (!strcmp($key, "info")) {
$save = $str;
}
//echo ".",$str{0};
$value = parse_torrent($str);
if (!strcmp($key, "info")) {
$tosha = substr($save, 0, strlen($save) - strlen($str));
$ret['info_hash'] = sha1($tosha);
}
if (!strcmp($key, "pieces")) {
$value = explode("====", substr(chunk_split( $value, 20, "===="),0, -4) );
}
$ret[$key] = $value;
}
$str = substr($str,1);
return $ret;
} else if ($str{0} == 'i') {
//echo "_";
$ret = substr($str, 1, strpos($str, "e")-1);
$str = substr($str, strpos($str, "e")+1);
return $ret;
} else if ($str{0} == 'l') {
//echo "#";
$ret = array();
$str = substr($str, 1);
while (strlen($str) && $str{0} != 'e') {
$value = parse_torrent($str);
if (strlen($str) == strlen($s)) break;
$ret[] = $value;
}
$str = substr($str,1);
return $ret;
} else if (is_numeric($str{0})) {
//echo "@";
$namelen = substr($str, 0, strpos($str, ":"));
$name = substr($str, strpos($str, ":")+1, $namelen);
$str = substr($str, strpos($str, ":")+1+$namelen);
return $name;
}
}
$bencode = parse_torrent($str);
Код: Выделить всё
$bencode['info_hash'];
Код: Выделить всё
// attachment.html
<!-- IF _file.S_FILE -->
({_file.infohash}) ...