PHP 接收二进制流转换成图片,图片类imageUpload.php如下:

  1. <?php  
  2. /** 
  3.  * 图片类 
  4. * @author http://blog.csdn.net/haiqiao_2010 
  5. * @version 1.0 
  6. * 
  7. * PHP默认只识别application/x-www.form-urlencoded标准的数据类型。 
  8. * 因此,对型如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用$_POST数组来接收就会失败! 
  9. * 故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。 
  10.  
  11. * 另外还有一项 php://input 也可以实现此这个功能 
  12.  
  13. * php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input和 $HTTP_RAW_POST_DATA 不能用于 enctype="multipart/form-data"。 
  14. */  
  15. class imageUpload {  
  16.     const ROOT_PATH = './';  
  17.     const FAIL_WRITE_DATA = 'Fail to write data';  
  18.     //没有数据流  
  19.     const NO_STREAM_DATA = 'The post data is empty';  
  20.     //图片类型不正确  
  21.     const NOT_CORRECT_TYPE = 'Not a correct image type';  
  22.     //不能创建文件  
  23.     const CAN_NOT_CREATE_FILE = 'Can not create file';  
  24.     //上传图片名称  
  25.     public $image_name;  
  26.     //图片保存名称  
  27.     public $save_name;  
  28.     //图片保存路径  
  29.     public $save_dir;  
  30.     //目录+图片完整路径  
  31.     public $save_fullpath;  
  32.   
  33.     /** 
  34.      * 构造函数 
  35.      * @param String $save_name 保存图片名称 
  36.      * @param String $save_dir 保存路径名称 
  37.      */  
  38.     public function __construct($save_name$save_dir) {  
  39.         //set_error_handler ( $this->error_handler () );  
  40.   
  41.         //设置保存图片名称,若未设置,则随机产生一个唯一文件名  
  42.         $this->save_name = $save_name ? $save_name : md5 ( mt_rand (), uniqid () );  
  43.         //设置保存图片路径,若未设置,则使用年/月/日格式进行目录存储  
  44.         $this->save_dir =  $save_dir ? self::ROOT_PATH .$save_dir : self::ROOT_PATH .date ( 'Y/m/d' );  
  45.   
  46.         //创建文件夹  
  47.         @$this->create_dir ( $this->save_dir );  
  48.         //设置目录+图片完整路径  
  49.         $this->save_fullpath = $this->save_dir . '/' . $this->save_name;  
  50.     }  
  51.     //兼容PHP4  
  52.     public function image($save_name) {  
  53.         $this->__construct ( $save_name );  
  54.     }  
  55.   
  56.     public function stream2Image() {  
  57.         //二进制数据流  
  58.         $data = file_get_contents ( 'php://input' ) ? file_get_contents ( 'php://input' ) : gzuncompress ( $GLOBALS ['HTTP_RAW_POST_DATA'] );  
  59.         //数据流不为空,则进行保存操作  
  60.         if (! empty ( $data )) {  
  61.             //创建并写入数据流,然后保存文件  
  62.             if (@$fp = fopen ( $this->save_fullpath, 'w+' )) {  
  63.                 fwrite ( $fp$data );  
  64.                 fclose ( $fp );  
  65.                 $baseurl = "http://" . $_SERVER ["SERVER_NAME"] . ":" . $_SERVER ["SERVER_PORT"] . dirname ( $_SERVER ["SCRIPT_NAME"] ) . '/' . $this->save_name;  
  66.                 if ( $this->getimageInfo ( $baseurl )) {  
  67.                     echo $baseurl;  
  68.                 } else {  
  69.                     echo ( self::NOT_CORRECT_TYPE  );  
  70.                 }  
  71.             } else {  
  72.   
  73.             }  
  74.         } else {  
  75.             //没有接收到数据流  
  76.             echo ( self::NO_STREAM_DATA );  
  77.         }  
  78.     }  
  79.     /** 
  80.      * 创建文件夹 
  81.      * @param String $dirName 文件夹路径名 
  82.      */  
  83.     public function create_dir($dirName$recursive = 1,$mode=0777) {  
  84.         ! is_dir ( $dirName ) && mkdir ( $dirName,$mode,$recursive );  
  85.     }  
  86.     /** 
  87.      * 获取图片信息,返回图片的宽、高、类型、大小、图片mine类型 
  88.      * @param String $imageName 图片名称 
  89.      */  
  90.     public function getimageInfo($imageName = '') {  
  91.         $imageInfo = getimagesize ( $imageName );  
  92.         if ($imageInfo !== false) {  
  93.             $imageType = strtolower ( substr ( image_type_to_extension ( $imageInfo [2] ), 1 ) );  
  94.             $imageSize = filesize ( $imageInfo );  
  95.             return $info = array ('width' => $imageInfo [0], 'height' => $imageInfo [1], 'type' => $imageType'size' => $imageSize'mine' => $imageInfo ['mine'] );  
  96.         } else {  
  97.             //不是合法的图片  
  98.             return false;  
  99.         }  
  100.   
  101.     }  
  102.   
  103.     /*private function error_handler($a, $b) { 
  104.      echo $a, $b; 
  105.     }*/  
  106.   
  107. }  
  108. ?>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值