简体   繁体   English

php中stream_wrapper_register的实际用途是什么?

[英]What is practical uses of stream_wrapper_register in php?

I am new learner in php. 我是php的新手。 and i found 'stream_wrapper_register' function in php documentation. 我在php文档中找到了“ stream_wrapper_register”功能。 Here is link http://php.net/manual/en/function.stream-wrapper-register.php . 这是链接http://php.net/manual/en/function.stream-wrapper-register.php

Can anyone please help me to understand exact use of this function in projects. 谁能帮助我了解项目中此功能的确切用法。 I didn't found any realtime examples for this. 我没有为此找到任何实时示例。

Here is an example, how to use data from variable with function that only reads from files (method Image of FPDF class is 'replaced' by method MemImage ). 这是一个示例,说明如何使用具有仅从文件读取的函数的变量中的数据(通过方法MemImage将FPDF类的方法Image “替换”)。

http://www.fpdf.org/en/script/script45.php http://www.fpdf.org/en/script/script45.php

require('fpdf.php');

//Stream handler to read from global variables
class VariableStream
{
    var $varname;
    var $position;

    function stream_open($path, $mode, $options, &$opened_path)
    {
        $url = parse_url($path);
        $this->varname = $url['host'];
        if(!isset($GLOBALS[$this->varname]))
        {
            trigger_error('Global variable '.$this->varname.' does not exist', E_USER_WARNING);
            return false;
        }
        $this->position = 0;
        return true;
    }

    function stream_read($count)
    {
        $ret = substr($GLOBALS[$this->varname], $this->position, $count);
        $this->position += strlen($ret);
        return $ret;
    }

    function stream_eof()
    {
        return $this->position >= strlen($GLOBALS[$this->varname]);
    }

    function stream_tell()
    {
        return $this->position;
    }

    function stream_seek($offset, $whence)
    {
        if($whence==SEEK_SET)
        {
            $this->position = $offset;
            return true;
        }
        return false;
    }

    function stream_stat()
    {
        return array();
    }
}

class PDF_MemImage extends FPDF
{
    function PDF_MemImage($orientation='P', $unit='mm', $format='A4')
    {
        $this->FPDF($orientation, $unit, $format);
        //Register var stream protocol
        stream_wrapper_register('var', 'VariableStream');
    }

    function MemImage($data, $x=null, $y=null, $w=0, $h=0, $link='')
    {
        //Display the image contained in $data
        $v = 'img'.md5($data);
        $GLOBALS[$v] = $data;
        $a = getimagesize('var://'.$v);
        if(!$a)
            $this->Error('Invalid image data');
        $type = substr(strstr($a['mime'],'/'),1);
        $this->Image('var://'.$v, $x, $y, $w, $h, $type, $link);
        unset($GLOBALS[$v]);
    }

    function GDImage($im, $x=null, $y=null, $w=0, $h=0, $link='')
    {
        //Display the GD image associated to $im
        ob_start();
        imagepng($im);
        $data = ob_get_clean();
        $this->MemImage($data, $x, $y, $w, $h, $link);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM