[go: up one dir, main page]

Menu

[r1]: / includes / RDFile.class.php  Maximize  Restore  History

Download this file

85 lines (73 with data), 2.1 kB

 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?
class RDFile {
var $file_info;
var $position;
var $buffer;
var $mailbuf;
var $mailstate=false;
var $mailbox;
var $bottom=0;
var $pop3;
function RDFile($pop3,$file_info){
$this->file_info=$file_info;
$this->position=0;
$this->mailbox=$pop3->ListMessages("",1);
$this->pop3=$pop3;
if(isset($this->mailbox[$file_info['parts'][0]['mailid']])) echo "cool";
}
function evalpart($pos,$bott=false){
$bottom=0;
$k=count($this->file_info['parts']);
for($i=0;$i<$k;$i++){
if(($pos>=$bottom)&&($pos<($bottom+$this->file_info['parts'][$i]['size']))){
break;
}
$bottom+=$this->file_info['parts'][$i]['size'];
}
//echo "bottom:$bottom";flush();
if($bott) $bott=$bottom;
return $i;
}
function fseek($seekpos){
$this->position=$seekpos;
}
function _fread($count,$position,$mailid){
$bottom=true;
$ind=$this->evalpart($position,&$bottom);
if(($this->mailstate===false)||($this->mailstate!=$ind)){
$this->mailstate=$this->evalpart($position);
$this->pop3->RetrieveMessage($this->mailbox[$mailid],$headers,$this->mailbuf,-1);
}
//echo "bottom:$bottom";flush();
//echo "calculate substr pos:$position count:$count startpos:".($position-$bottom)."lenmailbuf:".strlen($this->mailbuf)."\n";flush();
return substr($this->mailbuf,($position-$bottom),($count));
}
function fread($count){
if(($this->position+$count)>($this->file_info['size'])){
$count=$this->file_info['size']-$this->position;
}
$this->buffer='';
$pos=$this->position;
$cnt=$count;
$cnt1=$count;
while (strlen($this->buffer)<$count){
//echo 'len:'.strlen($this->buffer);flush();
$bottom=true;
$ind=$this->evalpart($pos,&$bottom);
if(($pos+$cnt)>($bottom+$this->file_info['parts'][$ind]['size'])){
$cnt1=$bottom+$this->file_info['parts'][$ind]['size']-$pos;
}else{
$cnt1=$cnt;
}
$this->buffer.=$this->_fread($cnt1,$pos,$this->file_info['parts'][$ind]['mailid']);
$pos+=$cnt1;
$cnt-=$cnt1;
}
$this->position=$pos;
return $this->buffer;
}
function feof(){
return ($this->position>=$this->file_info['size']);
}
}
?>