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

 更新时间:2018年05月30日 10:53:30   作者:blueel  
这篇文章主要介绍了PHP实现通过CURL上传文件功能,结合实例形式分析了php使用curl文件上传操作相关属性设置与使用技巧,需要的朋友可以参考下

本文实例讲述了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 curl用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《PHP运算与运算符用法总结

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

相关文章

  • PHP中去掉字符串首尾空格的方法

    PHP中去掉字符串首尾空格的方法

    今天在做php的时候需要将字符串首尾的空格去掉,百度一下发现php就自带这个函数trim,果然方便多了,特分享下
    2012-05-05
  • 关于PHP通用返回值设置方法

    关于PHP通用返回值设置方法

    下面小编就为大家带来一篇关于PHP通用返回值设置方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • php使用curl详细解析及问题汇总

    php使用curl详细解析及问题汇总

    CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使用它来发送HTTP请求。它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。CURL可以根据URL前缀是“HTTP” 还是“HTTPS”自动选择是否加密发送内容。
    2016-08-08
  • PHP判断文章里是否有图片的简单方法

    PHP判断文章里是否有图片的简单方法

    这篇文章主要介绍了PHP判断文章里是否有图片的方法,很实用的功能,需要的朋友可以参考下
    2014-07-07
  • php异常与错误处理机制概念及使用介绍

    php异常与错误处理机制概念及使用介绍

    在php中,可以利用异常处理类“Exception”中内置的各种成员函数来获取并返回异常数据,例如getMessage()函数就可以返回异常的消息内容;也可以通过“try catch”语句和“throw”关键字来捕获程序中的异常
    2022-09-09
  • 详解PHP对数组的定义以及数组的创建方法

    详解PHP对数组的定义以及数组的创建方法

    这篇文章主要介绍了PHP对数组的定义以及数组的创建方法,PHP中具有传统编译型语言那样的数组和多维数组,需要的朋友可以参考下
    2015-11-11
  • php通过exif_read_data函数获取图片的exif信息

    php通过exif_read_data函数获取图片的exif信息

    这篇文章主要介绍了php通过exif_read_data函数获取图片的exif信息,默认情况下,PHP读取图片Exif信息模块是不开启的,我们需要先开启这个模块。开启Exif模块需要mbstring支持,这里就不详细说明了,我们来先看下函数的用法
    2015-05-05
  • PHP处理postfix邮件内容的方法

    PHP处理postfix邮件内容的方法

    这篇文章主要介绍了PHP处理postfix邮件内容的方法,涉及php读取、正则匹配邮件内容的相关技巧,需要的朋友可以参考下
    2015-06-06
  • php格式输出文件var_export函数实例

    php格式输出文件var_export函数实例

    这篇文章主要介绍了php格式输出文件var_export函数,以实例形式讲述了格式输出函数var_export的特性与具体用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • 详解WordPress开发中wp_title()函数的用法

    详解WordPress开发中wp_title()函数的用法

    这篇文章主要介绍了WordPress开发中wp_title()函数的用法,wp_title可以用来显示文章标题和分类名称等,需要的朋友可以参考下
    2016-01-01

最新评论