PHP实现通过CURL上传文件功能示例


Posted in PHP onMay 30, 2018

本文实例讲述了PHP实现通过CURL上传文件功能。分享给大家供大家参考,具体如下:

PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以"@"开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变量$_FILES中取到相应的上传文件信息。

下面我们以一个例子来展示这个过程。

假设本地有一个文本文件log.txt,其路径为"/www/test/log.txt",内容如下:

this is a file for test
hello PythonTab!

为了把这个文件上传给服务端的脚本http://yourwebname.com/upload.php,我们在本地写了一个名为curl_file.php的脚本,内容如下:

<?php
$url = "http://yourwebname.com/upload.php";
$post_data = array(
"foo" => "bar",
//要上传的本地文件地址
"upload" = > "@/www/test/log.txt"
);
$ch = curl_init();
curl_setopt($ch , CURLOPT_URL , $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch , CURLOPT_POST, 1);
curl_setopt($ch , CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
?>

curl_file.php的逻辑很简单,设置POST变量$post_data,其中upload指向需要发送的文件。这里要注意,我们之前使用POST都是发送一个字符串,然后在服务器端使用file_get_contents("php//input")来获取该字符串,和这里的用法不一样,其实POST也可以像GET一样,发送键值对。在服务端有一个超级全局变量$_POST可以像$_GET一样,获取相应的POST数据的值。需要注意的是,上传文件的变量不是存在着$_POST中,而是在$_FILES中。

为了展示服务端收到上述代码的文件上传请求的逻辑,我们在upload.php中写了以下代码:

<?php
echo var_export($_FILES,true);
echo file_get_contents($_FILES['upload']['tmp_name']);
copy($_FILES['upload']['tmp_name'], "./log_copy.txt");
?>

upload.php首先使用var_export$_FILES变量输出到标准输出,然后使用file_get_contents读取$_FILES['upload']['tmp_name']所指文件的内容,并输出到标准输出,然后把$_FILES['upload']['tmp_name']所指文件自制到当前目录的log_copy.txt文件中。该脚本的标准输出如下:

array(
'upload' =>
array(
'name' => 'log.txt',
'type' => 'application/octet-stream',
'tmp_name' => '/tmp/phpLUB59F',
'error' => 0,
'size' => 36,
)
)
this is a file for test
hello PythonTab!

可以看到$_FILES变量中有一个upload数组,对应到上传文件描述信息,其中name和type分别表示名称和类型。tmp_name比较关键,服务端在接收到上传文件之后,会把文件写在一个临时文件中,这个临时文件的名字就是tmp_name的值,这也是为什么我们读取该文件可以获取一log.txt的文件内容。一般在服务端接收到上传文件后都需要立即读取该文件或者把文件复制到别外一个文件中,因为tmp_name所指的临时文件在服务端脚本执行完毕后会被删除掉,upload.php脚本的最后一行就是把临时文件复制到我们的目标文件中。

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

PHP 相关文章推荐
精通php的十大要点(上)
Feb 04 PHP
PHP教程 变量定义
Oct 23 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
php中判断数组相等的方法以及数组运算符介绍
Mar 30 PHP
PHP7.0版本备注
Jul 23 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 PHP
php实现微信支付之现金红包
May 30 #PHP
php微信支付之公众号支付功能
May 30 #PHP
php实现微信原生支付(扫码支付)功能
May 30 #PHP
php实现支付宝当面付(扫码支付)功能
May 30 #PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 #PHP
PHP ADODB生成下拉列表框功能示例
May 29 #PHP
Laravel实现短信注册的示例代码
May 29 #PHP
You might like
多文件上载系统完整版
2006/10/09 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
PHP中session变量的销毁
2014/02/27 PHP
php正则表达式学习笔记
2015/11/13 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
介绍Python中的__future__模块
2015/04/27 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
python判断输入日期为第几天的实例
2018/11/13 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
对公司合理化的建议书
2014/03/12 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript