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 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
配置支持SSI
Nov 25 PHP
如何使用PHP往windows中添加用户
Dec 06 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
PHP编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
php 面向对象的一个例子
Apr 12 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
PHP如何使用Memcached
Apr 05 PHP
php 输出json及显示json中的中文汉字详解及实例
Nov 09 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 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对象类型判断
2008/08/27 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
了解一点js的Eval函数
2012/07/26 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
python实现问号表达式(?)的方法
2013/11/27 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
七年级音乐教学反思
2014/01/26 职场文书
校园安全标语
2014/06/07 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
社团活动总结格式
2014/08/29 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL