ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ChainedBlockStream.php
Go to the documentation of this file.
1<?php
39{
44 public $ole;
45
50 public $params;
51
56 public $data;
57
62 public $pos;
63
75 public function stream_open($path, $mode, $options, &$openedPath)
76 {
77 if ($mode != 'r') {
78 if ($options & STREAM_REPORT_ERRORS) {
79 trigger_error('Only reading is supported', E_USER_WARNING);
80 }
81 return false;
82 }
83
84 // 25 is length of "ole-chainedblockstream://"
85 parse_str(substr($path, 25), $this->params);
86 if (!isset($this->params['oleInstanceId'],
87 $this->params['blockId'],
88 $GLOBALS['_OLE_INSTANCES'][$this->params['oleInstanceId']])) {
89
90 if ($options & STREAM_REPORT_ERRORS) {
91 trigger_error('OLE stream not found', E_USER_WARNING);
92 }
93 return false;
94 }
95 $this->ole = $GLOBALS['_OLE_INSTANCES'][$this->params['oleInstanceId']];
96
97 $blockId = $this->params['blockId'];
98 $this->data = '';
99 if (isset($this->params['size']) &&
100 $this->params['size'] < $this->ole->bigBlockThreshold &&
101 $blockId != $this->ole->root->_StartBlock) {
102
103 // Block id refers to small blocks
104 $rootPos = $this->ole->_getBlockOffset($this->ole->root->_StartBlock);
105 while ($blockId != -2) {
106 $pos = $rootPos + $blockId * $this->ole->bigBlockSize;
107 $blockId = $this->ole->sbat[$blockId];
108 fseek($this->ole->_file_handle, $pos);
109 $this->data .= fread($this->ole->_file_handle, $this->ole->bigBlockSize);
110 }
111 } else {
112 // Block id refers to big blocks
113 while ($blockId != -2) {
114 $pos = $this->ole->_getBlockOffset($blockId);
115 fseek($this->ole->_file_handle, $pos);
116 $this->data .= fread($this->ole->_file_handle, $this->ole->bigBlockSize);
117 $blockId = $this->ole->bbat[$blockId];
118 }
119 }
120 if (isset($this->params['size'])) {
121 $this->data = substr($this->data, 0, $this->params['size']);
122 }
123
124 if ($options & STREAM_USE_PATH) {
125 $openedPath = $path;
126 }
127
128 return true;
129 }
130
135 public function stream_close()
136 {
137 $this->ole = null;
138 unset($GLOBALS['_OLE_INSTANCES']);
139 }
140
147 public function stream_read($count)
148 {
149 if ($this->stream_eof()) {
150 return false;
151 }
152 $s = substr($this->data, $this->pos, $count);
153 $this->pos += $count;
154 return $s;
155 }
156
162 public function stream_eof()
163 {
164 return $this->pos >= strlen($this->data);
165 }
166
173 public function stream_tell()
174 {
175 return $this->pos;
176 }
177
185 public function stream_seek($offset, $whence)
186 {
187 if ($whence == SEEK_SET && $offset >= 0) {
188 $this->pos = $offset;
189 } elseif ($whence == SEEK_CUR && -$offset <= $this->pos) {
190 $this->pos += $offset;
191 } elseif ($whence == SEEK_END && -$offset <= sizeof($this->data)) {
192 $this->pos = strlen($this->data) + $offset;
193 } else {
194 return false;
195 }
196 return true;
197 }
198
204 public function stream_stat()
205 {
206 return array(
207 'size' => strlen($this->data),
208 );
209 }
210
211 // Methods used by stream_wrapper_register() that are not implemented:
212 // bool stream_flush ( void )
213 // int stream_write ( string data )
214 // bool rename ( string path_from, string path_to )
215 // bool mkdir ( string path, int mode, int options )
216 // bool rmdir ( string path, int options )
217 // bool dir_opendir ( string path, int options )
218 // array url_stat ( string path, int flags )
219 // string dir_readdir ( void )
220 // bool dir_rewinddir ( void )
221 // bool dir_closedir ( void )
222}
$path
Definition: aliased.php:25
An exception for terminatinating execution or to throw for unit testing.
stream_read($count)
Implements support for fread(), fgets() etc.
stream_open($path, $mode, $options, &$openedPath)
Implements support for fopen().
stream_tell()
Returns the position of the file pointer, i.e.
stream_close()
Implements support for fclose().
stream_seek($offset, $whence)
Implements support for fseek().
stream_stat()
Implements support for fstat().
stream_eof()
Implements support for feof().
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
if(!is_array($argv)) $options