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 相关文章推荐
ubuntu10.04配置 nginx+php-fpm模式的详解
Jun 03 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
PHP 如何利用phpexcel导入数据库
Aug 24 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
CodeIgniter连贯操作的底层原理分析
May 17 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PDO::errorInfo讲解
Jan 28 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
PHP中md5()函数的用法讲解
Mar 30 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静态新闻列表自动生成代码
2007/06/14 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
浅谈python3中input输入的使用
2019/08/02 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
什么是.net
2015/08/03 面试题
结婚保证书(卖身契)
2015/02/26 职场文书
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript