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中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
PHP+ACCESS 文章管理程序代码
Jun 21 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
PHP字符编码问题之GB2312 VS UTF-8解决方法
Jun 23 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
XHProf报告字段含义的解析
May 17 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 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
通过php删除xml文档内容的方法
2015/01/23 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
收集前端面试题之url、href、src
2018/03/22 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
Python中多线程及程序锁浅析
2015/01/21 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
办公室文员工作职责
2014/01/31 职场文书
文明餐桌活动方案
2014/02/11 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
停电通知范文
2015/04/16 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
python 详解turtle画爱心代码
2022/02/15 Python
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏