PHP cURL上传图片
2019独角兽企业重金招聘Python工程师标准>>>
在PHP5.5之前的版本,curl上传文件的方法是使用 @+文件绝对路径 将post数组传递给 CURLOPT_POSTFIELDS
curl_setopt(ch, CURLOPT_POSTFIELDS, array('file'=> '@'.realpath('file.png')));
在5.5版本之后引入了 CURLFile类 http://php.net/manual/zh/curlfile.construct.php 另外也引入了 CURL_SAFE_UPLOAD 选项,可以强制PHP的cURL模块拒绝旧的@语法,仅接受CURLFile式的文件。5.5的默认值为false,5.6的默认值为true。并且5.6已经移除了 @+文件绝对路径 这种上传文件的方法。 CURLFile类 的使用方法
curl_setopt($curl, CURLOPT_POSTFIELDS, ['name'=> new CURLFile('文件绝对路径','文件类型(image/jpeg)'),]);
下面是自己写的一个curl发送请求方法,可附加附件
public function Https_request( $url , $data = null, $cookie =null, $file =null) {$curl= curl_init ();curl_setopt ( $curl, CURLOPT_URL, $url);curl_setopt ( $curl
, CURLOPT_SSL_VERIFYPEER, FALSE );curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );//携带cookie文件
if(! empty($cookie)){curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); //读取cookie
}//携带头
if(!empty($header)){curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
}//上传文件
if(!empty($file)){$file_obj=new CURLFile($file['realpath'],$file['type']);$data["{$file['name']}"]=$file_obj;
}//发送post数据
if(! empty( $data) && !isset($file_obj)) {curl_setopt ( $curl, CURLOPT_POST, 1 );curl_setopt ( $curl, CURLOPT_POSTFIELDS, http_build_query($data) );
}elseif(!empty($data)){curl_setopt ( $curl, CURLOPT_POST, 1 );curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
$output= curl_exec ( $curl);if(empty($output)) return false;
curl_close ( $curl);
return is_null(json_decode($output))?$output:json_decode($output,true);
}
声明:
以上转载与本文,PHP CURL 上传图片,如有侵权,请您及时联系!
总结:之所以处理curl图片上传时踩了很多的坑,究竟其根本还是对Http协议不了解,对底层的知识点掌握的不牢固;对apache和php交互还不是很好;发奋图强研读RFC2616,这些知识点也是web开发工程师必备之一。
自己写的函数
/*** 上传文件** @param string $url 访问链接* @param mixed $params POST的提交数据* @param string $timeout 超时时间** @return json*/public function upload($url, $param, $timeout) {$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url); // 设置访问链接curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // 是否返回信息curl_setopt($ch, CURLOPT_HEADER, 'Content-type: application/json'); // 设置返回信息数据格式 application/jsoncurl_setopt($ch, CURLOPT_POST, TRUE); // 设置post方式提交curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); // POST提交数据$keyName = array_keys($_FILES);$curlFile = new \CURLFile($_FILES[$keyName[0]]['tmp_name'], $_FILES[$keyName[0]]['type'], $_FILES[$keyName[0]]['name']);curl_setopt($ch, CURLOPT_POSTFIELDS, [$keyName[0] => $curlFile]); // POST提交文件curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); // 超时时间$result = curl_exec($ch);$err_no = curl_errno($ch); // 获取错误编号,0为正常curl_close($ch);if ($err_no) {return '请求失败,错误码:' . $err_no;} elseif (is_null(json_decode($result))) {return '请求返回异常:' . $result;}return $result;}
参考文献:
curl函数和curl_error错误码说明
考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
PHP CURL 上传图片
转载于:https://my.oschina.net/u/2292141/blog/895692
PHP cURL上传图片相关推荐
- PHP5.6通过CURL上传图片@符无效的兼容问题
今天本来想试试一个图片云的API,于是本地做了个上传图片的测试,结果灰常郁闷的发现以前一直用的好好的CURL上传图片居然死活不起作用,本来几分钟搞定的事情,结果折腾了大半天才终于找到原因,居然是兼容性 ...
- php curl post上传图片,php curl上传图片问题
关于curl上传图片至微信 上传logo素材 接口.上传图片不成功,请问是什么问题? 我用的是5.6以上的PHP,图片路径给的相对的. 从网上找到一种curl的post请求方法 public func ...
- php 通过curl上传图片
通过curl上传图片 PHP < 5.5: 使用 目前使用的php版本 7.1 测试无法使用 前面加@ 的方法上传文件 ,查找资料 使用 curl_setopt($ch,CURLOPT_SAFE ...
- PHP通过CURL上传图片(微信公众号上传素材)
这里以微信公众号素材管理为例. PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cUR ...
- 读书笔记:PHP和MySQL高性能应用开发 (2019.2.20-2019.3.4)
1.emtpy.isset.is_null的区别 isset()检测一个变量是否已声明且值不为NULL,并且声名一个变量没有赋值也算false,但是空字符串或者空格为true empty()用来检 ...
- 用php批处理图片,PHP中使用CURL发送get/post请求上传图片批处理功能
cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. ...
- php curl post上传图片,PHP中使用CURL发送get/post请求上传图片批处理功能
cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. ...
- php 中使用cURL发送get/post请求,上传图片,批处理
https://mp.weixin.qq.com/s/8luqMEd8xt8oJxFLLCU1XA 文章正文 cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络 ...
- linux curl 使用详解 常见应用
curl 1 http 超时 -m 指定超时的时间 等于--connect-timeout 2 输出到空 -o /dev/null 不输出,正常是输出html格式 3 -w 指定格式输出 4 -s 去 ...
最新文章
- 死锁产生条件-环路等待条件
- mac软件更新卡住不动_如何修复Mac运行缓慢?修复它的五种简单方法
- 概率机器人总结——占用栅格地图先实践再推导
- C# 各版本更新简介
- 从功能、交互、性能全方位解读,BI工具FineBI4.0.2测评报告
- Azure Services Platform
- 【杂文】Vue 杂文
- 专科python应届生工资多少-请问学过一点python,应届生怎么找工作?
- 二分、冒泡、快速、插入排序
- tourex旅游系统 php,TourEx 旅游电商系统B2C_B2B2C v7.0升级V8.0 旅游源码系统无限制版源码工程源码...
- FileviewPro万能文件查看器
- Django ---uploads files
- erp系统不能连接服务器配置,erp系统云服务器怎么配置
- 关于ssm框架的外文文献及译文_学术小白应该如何高效阅读文献?
- 联想G40-30进win10PE触摸板、键盘无反应
- [算法] 剑指offer2 golang 面试题2:二进制加法
- ArcGIS教程:ArcGIS中的报表
- 举个栗子!Tableau 技巧(121):用 Makepoint 和 Makeline 函数实现连线地图
- Python爬取微博热搜数据之炫酷可视化
- 简单的一键分享(1)
热门文章
- 在职测试多年整理了自己常用的Linux命令...
- Endnote在word中每次启动都要加载,或者无法加载的解决办法
- ppt中插入excel源文件丢失,提取图中数据
- linux 单用户模式 挂载u盘_(原创)Linux文件系统只读Read-only file system的快速解决方法...
- idea错误提示不明显_淘宝镜像错误导致vue项目一系列异常
- linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx
- matlab 中产生高斯白噪声
- 搭建BP神经网络(完整代码快速上手)
- 计算机专业英语问卷调查,调查问卷英文版.doc
- zplane函数怎么用m文件调用_elastique.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...