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上传图片相关推荐

  1. PHP5.6通过CURL上传图片@符无效的兼容问题

    今天本来想试试一个图片云的API,于是本地做了个上传图片的测试,结果灰常郁闷的发现以前一直用的好好的CURL上传图片居然死活不起作用,本来几分钟搞定的事情,结果折腾了大半天才终于找到原因,居然是兼容性 ...

  2. php curl post上传图片,php curl上传图片问题

    关于curl上传图片至微信 上传logo素材 接口.上传图片不成功,请问是什么问题? 我用的是5.6以上的PHP,图片路径给的相对的. 从网上找到一种curl的post请求方法 public func ...

  3. php 通过curl上传图片

    通过curl上传图片 PHP < 5.5: 使用 目前使用的php版本 7.1 测试无法使用 前面加@ 的方法上传文件 ,查找资料 使用 curl_setopt($ch,CURLOPT_SAFE ...

  4. PHP通过CURL上传图片(微信公众号上传素材)

    这里以微信公众号素材管理为例. PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cUR ...

  5. 读书笔记:PHP和MySQL高性能应用开发 (2019.2.20-2019.3.4)

    1.emtpy.isset.is_null的区别 isset()检测一个变量是否已声明且值不为NULL,并且声名一个变量没有赋值也算false,但是空字符串或者空格为true   empty()用来检 ...

  6. 用php批处理图片,PHP中使用CURL发送get/post请求上传图片批处理功能

    cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get   post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. ...

  7. php curl post上传图片,PHP中使用CURL发送get/post请求上传图片批处理功能

    cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get   post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. ...

  8. php 中使用cURL发送get/post请求,上传图片,批处理

    https://mp.weixin.qq.com/s/8luqMEd8xt8oJxFLLCU1XA 文章正文 cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络 ...

  9. linux curl 使用详解 常见应用

    curl 1 http 超时 -m 指定超时的时间 等于--connect-timeout 2 输出到空 -o /dev/null 不输出,正常是输出html格式 3 -w 指定格式输出 4 -s 去 ...

最新文章

  1. 死锁产生条件-环路等待条件
  2. mac软件更新卡住不动_如何修复Mac运行缓慢?修复它的五种简单方法
  3. 概率机器人总结——占用栅格地图先实践再推导
  4. C# 各版本更新简介
  5. 从功能、交互、性能全方位解读,BI工具FineBI4.0.2测评报告
  6. Azure Services Platform
  7. 【杂文】Vue 杂文
  8. 专科python应届生工资多少-请问学过一点python,应届生怎么找工作?
  9. 二分、冒泡、快速、插入排序
  10. tourex旅游系统 php,TourEx 旅游电商系统B2C_B2B2C v7.0升级V8.0 旅游源码系统无限制版源码工程源码...
  11. FileviewPro万能文件查看器
  12. Django ---uploads files
  13. erp系统不能连接服务器配置,erp系统云服务器怎么配置
  14. 关于ssm框架的外文文献及译文_学术小白应该如何高效阅读文献?
  15. 联想G40-30进win10PE触摸板、键盘无反应
  16. [算法] 剑指offer2 golang 面试题2:二进制加法
  17. ArcGIS教程:ArcGIS中的报表
  18. 举个栗子!Tableau 技巧(121):用 Makepoint 和 Makeline 函数实现连线地图
  19. Python爬取微博热搜数据之炫酷可视化
  20. 简单的一键分享(1)

热门文章

  1. 在职测试多年整理了自己常用的Linux命令...
  2. Endnote在word中每次启动都要加载,或者无法加载的解决办法
  3. ppt中插入excel源文件丢失,提取图中数据
  4. linux 单用户模式 挂载u盘_(原创)Linux文件系统只读Read-only file system的快速解决方法...
  5. idea错误提示不明显_淘宝镜像错误导致vue项目一系列异常
  6. linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx
  7. matlab 中产生高斯白噪声
  8. 搭建BP神经网络(完整代码快速上手)
  9. 计算机专业英语问卷调查,调查问卷英文版.doc
  10. zplane函数怎么用m文件调用_elastique.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...