PHP7基于curl实现的上传图片功能


Posted in PHP onMay 11, 2018

本文实例讲述了PHP7基于curl实现的上传图片功能。分享给大家供大家参考,具体如下:

根据php版本不同,curl模拟表单上传的方法不同

php5.5之前

$curl = curl_init();
if (defined('CURLOPT_SAFE_UPLOAD')) {
  curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
}
$data = array('file' => '@' . realpath($path));//‘@' 符号告诉服务器为上传资源
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT,"TEST");
$result = curl_exec($curl);
$error = curl_error($curl);

php5.5之后,到php7

$curl = curl_init();
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
$data = array('file' => new \CURLFile(realpath($path)));
url_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT,"TEST");
$result = curl_exec($curl);
$error = curl_error($curl);

下面提供一个兼容的方法:

$curl = curl_init();
if (class_exists('\CURLFile')) {
 curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
$data = array('file' => new \CURLFile(realpath($path)));//>=5.5
} else {
 if (defined('CURLOPT_SAFE_UPLOAD')) {
  curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
 }
 $data = array('file' => '@' . realpath($path));//<=5.5
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT,"TEST");
$result = curl_exec($curl);
$error = curl_error($curl);

其中:

$path:为待上传的图片地址

$url:目标服务器地址

例如

$url="http://localhost/upload.php";
$path = "/bg_right.jpg"

upload.php示例:

<?php
  file_put_contents(time().".json", json_encode($_FILES));
  $tmp_name = $_FILES['file']['tmp_name'];
  $name = $_FILES['file']['name'];
  move_uploaded_file($tmp_name,'audit/'.$name);
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
表格展示无限级分类(PHP版)
Aug 21 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 PHP
PHP删除数组中特定元素的两种方法
Jul 02 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
php面向对象中static静态属性和静态方法的调用
Feb 08 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
mongodb和php的用法详解
Mar 25 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 PHP
关于ThinkPHP中的异常处理详解
May 11 #PHP
PHP基于递归算法解决兔子生兔子问题
May 11 #PHP
PHP7如何开启Opcode打造强悍性能详解
May 11 #PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 #PHP
PHP实现搜索时记住状态的方法示例
May 11 #PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 #PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 #PHP
You might like
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python 实现12306登录功能实例代码
2018/02/09 Python
Python装饰器用法实例总结
2018/05/26 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
Python函数装饰器实现方法详解
2018/12/22 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
幼儿园毕业教师感言
2014/02/21 职场文书
服务承诺口号
2014/05/22 职场文书
股东授权委托书范文
2014/09/13 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
西安兵马俑导游词
2015/02/02 职场文书
领导视察通讯稿
2015/07/18 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python