PHP Classes

File: TorrentReader.php

Recommend this page to a friend!
  Classes of rudie dirkx   Torrent Reader   TorrentReader.php   Download  
File: TorrentReader.php
Role: Class source
Content type: text/plain
Description: The class
Class: Torrent Reader
Parse and extract information from torrent files
Author: By
Last change:
Date: 12 years ago
Size: 3,191 bytes
 

Contents

Class file image Download
<?php

class TorrentReader {

    static public function
parse( $data, &$reader = null ) {
       
$reader = new self($data);
       
$reader->_parse();
        return
$reader->output;
    }

    public
$debug = false;
    protected
$types = array();
    protected
$dataLength = -1;
    public
$input = '';
    public
$output;
    public
$iterations = -1;

    public function
__construct( $data ) {
       
$this->input = $data;
       
$this->dataLength = strlen($this->input);
    }

    public function
_parse() {

       
$key = $content = null;

       
$php = '';
       
$keyval = 'root';

       
$start = 0;
       
$i = 0;

        while (
$start < $this->dataLength && $i < 99999 ) {

            if ( !
is_numeric($start) ) {
                break;
            }

           
$i++;

           
// end
           
if ( 'e' == substr($this->input, $start, 1) ) {
               
$ct = array_pop($this->types);
               
$php .= str_repeat("\t", count($this->types));
               
$php .= '),'."\n";
               
$key = true;
                if (
$this->debug ) {
                    echo
'<p><b>END CURRENT '.$ct.'</b></p>';
                }
               
$start += 1;
                continue;
            }
           
// dict
           
else if ( 'd' == substr($this->input, $start, 1) ) {
               
$php .= str_repeat("\t", count($this->types));
               
$php .= ( $this->dict() ? "'".addslashes($keyval)."'".' => array(' : 'array(' )."\n";
               
$key = true;
                if (
$this->debug ) {
                    echo
'<p><b>NEW DICTIONARY</b></p>';
                }
               
$start += 1;
               
$this->types[] = 'dict';
                continue;
            }
           
// list
           
else if ( 'l' == substr($this->input, $start, 1) ) {
               
$php .= str_repeat("\t", count($this->types));
               
$php .= ( $this->dict() ? "'".addslashes($keyval)."'".' => array(' : 'array(' )."\n";
                if (
$this->debug ) {
                    echo
'<p><b>NEW LIST</b></p>';
                }
               
$start += 1;
               
$this->types[] = 'list';
                continue;
            }

           
// value = Integer
           
if ( in_array(substr($this->input, $start, 1), array('i', 'f')) ) {
               
$end = strpos($this->input, 'e', $start+1);
               
$content = substr($this->input, $start+1, $end-$start-1);
                if ( !
is_numeric($content) ) {
                    break;
                }
               
$content = (float)$content;
               
$start = $end+1;
            }
           
// value = String
           
else {
               
$lpos = strpos($this->input, ':', $start);
               
$length = substr($this->input, $start, $lpos-$start);
                if ( !
is_numeric($length) ) {
                    break;
                }
               
$start = $lpos+1;
               
$content = substr($this->input, $start, $length);
               
$start += $length;
            }

            if (
'dict' != $this->ct() || !$key ) {
               
$php .= str_repeat("\t", count($this->types));
               
$php .= ( $this->dict() ? "'".$keyval."'".' => '."'".addslashes($content)."'" : "'".addslashes($content)."'" ).",\n";
            }

            if (
$this->debug ) {
                echo
'<pre>';
               
var_dump($content);
                echo
'</pre>';
            }

            if (
'dict' == $this->ct() ) {
               
$keyval = $content;
               
$key = !$key;
            }
        }

       
$phpArray = false;
        @eval(
'$phpArray = array('.$php.');');
        if (
$phpArray && isset($phpArray[0]) ) {
           
$this->output = $phpArray[0];

           
$this->iterations = $i;

            return
true;
        }

        return
false;

    }

    protected function
ct() {
        return !
$this->types ? null : $this->types[count($this->types)-1];
    }

    protected function
dict() {
        return
'dict' == $this->ct();
    }

}