一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

PHP实现接收二进制流转换成图片的方法

时间:2022-06-24 21:03:17 编辑:袖梨 来源:一聚教程网

本文实例讲述了PHP实现接收二进制流转换成图片的方法。分享给大家供大家参考,具体如下:

这里实现php 接收二进制流转换成图片,所使用的图片类imageUpload.php如下:

/**

* 图片类

* @version 1.0

*

* PHP默认只识别application/x-www.form-urlencoded标准的数据类型。

* 因此,对型如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用$_POST数组来接收就会失败!

* 故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。

* 另外还有一项 php://input 也可以实现此这个功能

* php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input和 $HTTP_RAW_POST_DATA 不能用于 enctype="multipart/form-data"。

*/

classimageUpload {

constROOT_PATH ='./';

constFAIL_WRITE_DATA ='Fail to write data';

//没有数据流

constNO_STREAM_DATA ='The post data is empty';

//图片类型不正确

constNOT_CORRECT_TYPE ='Not a correct image type';

//不能创建文件

constCAN_NOT_CREATE_FILE ='Can not create file';

//上传图片名称

public$image_name;

//图片保存名称

public$save_name;

//图片保存路径

public$save_dir;

//目录+图片完整路径

public$save_fullpath;

/**

* 构造函数

* @param String $save_name 保存图片名称

* @param String $save_dir 保存路径名称

*/

publicfunction__construct($save_name,$save_dir) {

//set_error_handler ( $this->error_handler () );

//设置保存图片名称,若未设置,则随机产生一个唯一文件名

$this->save_name =$save_name?$save_name: md5 ( mt_rand (), uniqid () );

//设置保存图片路径,若未设置,则使用年/月/日格式进行目录存储

$this->save_dir =$save_dir? self::ROOT_PATH .$save_dir: self::ROOT_PATH .date('Y/m/d');

//创建文件夹

@$this->create_dir ($this->save_dir );

//设置目录+图片完整路径

$this->save_fullpath =$this->save_dir .'/'.$this->save_name;

}

//兼容PHP4

publicfunctionimage($save_name) {

$this->__construct ($save_name);

}

publicfunctionstream2Image() {

//二进制数据流

$data=file_get_contents('php://input') ?file_get_contents('php://input') : gzuncompress ($GLOBALS['HTTP_RAW_POST_DATA'] );

//数据流不为空,则进行保存操作

if(!empty($data)) {

//创建并写入数据流,然后保存文件

if(@$fp=fopen($this->save_fullpath,'w+')) {

fwrite ($fp,$data);

fclose ($fp);

$baseurl="http://".$_SERVER["SERVER_NAME"] .":".$_SERVER["SERVER_PORT"] . dirname ($_SERVER["SCRIPT_NAME"] ) .'/'.$this->save_name;

if($this->getimageInfo ($baseurl)) {

echo$baseurl;

}else{

echo( self::NOT_CORRECT_TYPE );

}

}else{

}

}else{

//没有接收到数据流

echo( self::NO_STREAM_DATA );

}

}

/**

* 创建文件夹

* @param String $dirName 文件夹路径名

*/

publicfunctioncreate_dir($dirName,$recursive= 1,$mode=0777) {

!is_dir($dirName) &&mkdir($dirName,$mode,$recursive);

}

/**

* 获取图片信息,返回图片的宽、高、类型、大小、图片mine类型

* @param String $imageName 图片名称

*/

publicfunctiongetimageInfo($imageName='') {

$imageInfo=getimagesize($imageName);

if($imageInfo!== false) {

$imageType=strtolower(substr( image_type_to_extension ($imageInfo[2] ), 1 ) );

$imageSize=filesize($imageInfo);

return$info=array('width'=>$imageInfo[0],'height'=>$imageInfo[1],'type'=>$imageType,'size'=>$imageSize,'mine'=>$imageInfo['mine'] );

}else{

//不是合法的图片

returnfalse;

}

}

/*private function error_handler($a, $b) {

echo $a, $b;

}*/

}

?>

热门栏目