[英]PHPUnit stream_wrapper_register(): Protocol var:// is already defined
[英]What is practical uses of stream_wrapper_register in php?
我是php的新手。 我在php文档中找到了“ stream_wrapper_register”功能。 这是链接http://php.net/manual/en/function.stream-wrapper-register.php 。
谁能帮助我了解项目中此功能的确切用法。 我没有为此找到任何实时示例。
这是一个示例,说明如何使用具有仅从文件读取的函数的变量中的数据(通过方法MemImage
将FPDF类的方法Image
“替换”)。
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.