PHP实现上传图片到 zimg 服务器


Posted in PHP onOctober 19, 2016

最近我们项目需要一台图片服务器存储用户头像,我们使用 zimg 处理和存储图片,下面简单介绍一下如何使用 PHP 上传图片到 zimg,并获取相应图片的返回信息

使用 curl 库实现上传

根据 zimg 使用文档,我们想要让 zimg 返回 json 信息,就必须 raw_post 上传图片,下面是演示代码

$upload_url = 'http://192.168.0.99:5000/upload';

$image_file = './test.jpg';

// 获取图片后缀
$value = explode(".", $image_file);
$extension = strtolower(array_pop($value));

// 生成本地临时存储路径,并生成相应文件夹
$dir = 'aurthur';
$save_path = 'uploads/'.$dir.'/'.date('Y').'/'.date('md').'/';
$save_rule = md5(uniqid(mt_rand(), true));
if(!is_dir($save_path)){
  if(false === mkdir($save_path, 0700, true)){
    exit('创建文件夹失败');
  }
}
$save_image_file = $save_path.$save_rule.".$extension";

// 把图片存储到临时路径
file_put_contents($save_image_file, file_get_contents($image_file));

// 获取临时保存的图片的真实地址(绝对路径)
$realpath = realpath($save_image_file);

// 上传图片到 zimg 图片存储服务
$ch = curl_init();

// 将图片内容读取到变量 $post_data ;
$post_data = file_get_contents($realpath);

$headers = array();
// 一定要添加此 header
$headers[] = 'Content-Type:'.$extension;

curl_setopt($ch, CURLOPT_URL, $upload_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);// raw_post方式

$info = curl_exec($ch);
curl_close($ch);

$json = json_decode($info, true);
$signature = $json['info']['md5'];
echo $signature;

如果想测试代码的话,请把上面的uploadurl改成你自己的zimg服务器地址,并把image_file 改成你需要上传的图片的路径

PHP 相关文章推荐
PHP脚本的10个技巧(6)
Oct 09 PHP
php中cookie的作用域
Mar 27 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
PHP设计模式之单例模式定义与用法分析
Mar 26 PHP
php通过会话控制实现身份验证实例
Oct 18 #PHP
利用php_imagick实现复古效果的方法
Oct 18 #PHP
php封装的page分页类完整实例
Oct 18 #PHP
php封装的单文件(图片)上传类完整实例
Oct 18 #PHP
Thinkphp实现短信验证注册功能
Oct 18 #PHP
php基于单例模式封装mysql类完整实例
Oct 18 #PHP
php封装的mysqli类完整实例
Oct 18 #PHP
You might like
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
微信小程序 前端源码逻辑和工作流详解
2016/10/08 Javascript
JS高级运动实例分析
2016/12/20 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
python线程锁(thread)学习示例
2013/12/04 Python
python字典序问题实例
2014/09/26 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
如何提高JDBC的性能
2013/04/30 面试题
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
自考自我鉴定范文
2013/10/30 职场文书
九年级数学教学反思
2014/02/02 职场文书
干部鉴定材料
2014/05/18 职场文书
安全教育观后感
2015/06/17 职场文书
青涩记忆观后感
2015/06/18 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers