Vendor/phpspreadsheet/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/ChainedBlockStream.php
public function stream_open($path, $mode, $options, &$openedPath) // @codingStandardsIgnoreLine
    {
        if ($mode != 'r') {
            if ($options & STREAM_REPORT_ERRORS) {
                trigger_error('Only reading is supported', E_USER_WARNING);
            }

            return false;
        }

        // 25 is length of "ole-chainedblockstream://"
        parse_str(substr($path, 25), $this->params);
        if (!isset($this->params['oleInstanceId'], $this->params['blockId'], $GLOBALS['_OLE_INSTANCES'][$this->params['oleInstanceId']])) {
            if ($options & STREAM_REPORT_ERRORS) {
                trigger_error('OLE stream not found', E_USER_WARNING);
            }

            return false;
        }
        $this->ole = $GLOBALS['_OLE_INSTANCES'][$this->params['oleInstanceId']];

        $blockId = $this->params['blockId'];
        $this->data = '';
        if (isset($this->params['size']) && $this->params['size'] < $this->ole->bigBlockThreshold && $blockId != $this->ole->root->startBlock) {
            // Block id refers to small blocks
            $rootPos = $this->ole->_getBlockOffset($this->ole->root->startBlock);
            while ($blockId != -2) {
                $pos = $rootPos + $blockId * $this->ole->bigBlockSize;
                $blockId = $this->ole->sbat[$blockId];
                fseek($this->ole->_file_handle, $pos);
                $this->data .= fread($this->ole->_file_handle, $this->ole->bigBlockSize);
            }
        } else {
            // Block id refers to big blocks
            while ($blockId != -2) {
                $pos = $this->ole->_getBlockOffset($blockId);
                fseek($this->ole->_file_handle, $pos);
                $this->data .= fread($this->ole->_file_handle, $this->ole->bigBlockSize);
                $blockId = $this->ole->bbat[$blockId];
            }
        }
        if (isset($this->params['size'])) {
            $this->data = substr($this->data, 0, $this->params['size']);
        }

        if ($options & STREAM_USE_PATH) {
            $openedPath = $path;
        }

        return true;
    }
public function stream_open($path, $mode, $options, &$openedPath) // @codingStandardsIgnoreLine
    {
        if ($mode != 'r') {
            if ($options & STREAM_REPORT_ERRORS) {
                trigger_error('Only reading is supported', E_USER_WARNING);
            }

            return false;
        }

        // 25 is length of "ole-chainedblockstream://"
        parse_str(substr($path, 25), $this->params);
        if (!isset($this->params['oleInstanceId'], $this->params['blockId'], $GLOBALS['_OLE_INSTANCES'][$this->params['oleInstanceId']])) {
            if ($options & STREAM_REPORT_ERRORS) {
                trigger_error('OLE stream not found', E_USER_WARNING);
            }

            return false;
        }
        $this->ole = $GLOBALS['_OLE_INSTANCES'][$this->params['oleInstanceId']];

        $blockId = $this->params['blockId'];
        $this->data = '';
        if (isset($this->params['size']) && $this->params['size'] < $this->ole->bigBlockThreshold && $blockId != $this->ole->root->startBlock) {
            // Block id refers to small blocks
            $rootPos = $this->ole->_getBlockOffset($this->ole->root->startBlock);
            while ($blockId != -2) {
                $pos = $rootPos + $blockId * $this->ole->bigBlockSize;
                $blockId = $this->ole->sbat[$blockId];
                fseek($this->ole->_file_handle, $pos);
                $this->data .= fread($this->ole->_file_handle, $this->ole->bigBlockSize);
            }
        } else {
            // Block id refers to big blocks
            while ($blockId != -2) {
                $pos = $this->ole->_getBlockOffset($blockId);
                fseek($this->ole->_file_handle, $pos);
                $this->data .= fread($this->ole->_file_handle, $this->ole->bigBlockSize);
                $blockId = $this->ole->bbat[$blockId];
            }
        }
        if (isset($this->params['size'])) {
            $this->data = substr($this->data, 0, $this->params['size']);
        }

        if ($options & STREAM_USE_PATH) {
            $openedPath = $path;
        }

        return true;
    }
public function stream_open ( $ path , $ mode , $ options , & $ openedPath ) // @codingStandardsIgnoreLine { if ( $ mode != 'r' ) { if ( $ options & STREAM_REPORT_ERRORS ) { trigger_error ( 'Only reading is supported' , E_USER_WARNING ) ; } return false ; } // 25 is length of "ole-chainedblockstream://" parse_str ( substr ( $ path , 25 ) , $ this -> params ) ; if ( ! isset ( $ this -> params [ 'oleInstanceId' ] , $ this -> params [ 'blockId' ] , $ GLOBALS [ '_OLE_INSTANCES' ] [ $ this -> params [ 'oleInstanceId' ] ] ) ) { if ( $ options & STREAM_REPORT_ERRORS ) { trigger_error ( 'OLE stream not found' , E_USER_WARNING ) ; } return false ; } $ this -> ole = $ GLOBALS [ '_OLE_INSTANCES' ] [ $ this -> params [ 'oleInstanceId' ] ] ; $ blockId = $ this -> params [ 'blockId' ] ; $ this -> data = '' ; if ( isset ( $ this -> params [ 'size' ] ) && $ this -> params [ 'size' ] < $ this -> ole -> bigBlockThreshold && $ blockId != $ this -> ole -> root -> startBlock ) { // Block id refers to small blocks $ rootPos = $ this -> ole -> _getBlockOffset ( $ this -> ole -> root -> startBlock ) ; while ( $ blockId != - 2 ) { $ pos = $ rootPos + $ blockId * $ this -> ole -> bigBlockSize ; $ blockId = $ this -> ole -> sbat [ $ blockId ] ; fseek ( $ this -> ole -> _file_handle , $ pos ) ; $ this -> data .= fread ( $ this -> ole -> _file_handle , $ this -> ole -> bigBlockSize ) ; } } else { // Block id refers to big blocks while ( $ blockId != - 2 ) { $ pos = $ this -> ole -> _getBlockOffset ( $ blockId ) ; fseek ( $ this -> ole -> _file_handle , $ pos ) ; $ this -> data .= fread ( $ this -> ole -> _file_handle , $ this -> ole -> bigBlockSize ) ; $ blockId = $ this -> ole -> bbat [ $ blockId ] ; } } if ( isset ( $ this -> params [ 'size' ] ) ) { $ this -> data = substr ( $ this -> data , 0 , $ this -> params [ 'size' ] ) ; } if ( $ options & STREAM_USE_PATH ) { $ openedPath = $ path ; } return true ; }
Implements support for fopen().
For creating streams using this wrapper, use OLE_PPS_File::getStream().

@param string $path resource name including scheme, e.g.
ole-chainedblockstream://oleInstanceId=1
@param string $mode only "r" is supported
@param int $options mask of STREAM_REPORT_ERRORS and STREAM_USE_PATH
@param string &$openedPath absolute path of the opened stream (out parameter)

@return bool true on success
Implements support for fopen () . For creating streams using this wrapper use OLE_PPS_File :: getStream () .