curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄!

);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);

Note:

传递一个数组到CURLOPT_POSTFIELDS,cURL会把数据编码成 multipart/form-data,而然传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded

    1. /*
    2. * To change this template, choose Tools | Templates
    3. * ftp curl方法操作类
    4. */
    5. class ftp{
    6. //FTP服务器地址
    7. public static $host = "127.0.0.1";
    8. //FTP端口
    9. public static $port = "2121";
    10. //上传的FTP目录
    11. public static $uploaddir = "upblod";
    12. //读取的FTP目录
    13. public static $readdir = "read";
    14. //FTP用户名
    15. public static $usrname = "user";
    16. //FTP密码
    17. public static $pwd = "pwd";
    18. /*
    19. * curl 方法将文件上传到FTP服务器
    20. * $filename上传到FTP的文件名,$uploadfile具体需要上传文件的地址(我用的绝对路径)
    21. */
    22. public static function ftp_upload($filename,$uploadfile)
    23. {
    24. $url = "ftp://".self::$host.":".self::$port."/".self::$uploaddir."/".$filename;
    25. //需要上传的文件
    26. $fp = fopen ($uploadfile, "r");
    27. $ch = curl_init();
    28. curl_setopt($ch, CURLOPT_VERBOSE, 1);  //有意外发生则报道
    29. curl_setopt($ch, CURLOPT_USERPWD, self::$usrname.':'.self::$pwd); //FTP登陆账号密码,模拟登陆
    30. curl_setopt($ch, CURLOPT_URL, $url);
    31. curl_setopt($ch, CURLOPT_PUT, 1); //用HTTP上传一个文件
    32. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不输出
    33. curl_setopt($ch, CURLOPT_INFILE, $fp); //要上传的文件
    34. $http_result = curl_exec($ch); //执行
    35. $error = curl_error($ch);
    36. curl_close($ch);
    37. fclose($fp);
    38. //成功上传文件 返回true
    39. if (!$error)
    40. {
    41. return true;
    42. }
    43. }
    44. /*
    45. * curl 方法将读取FTP文件并保存在本地使用
    46. * $filenameFTP服务器文件名,$filepath 保存到本地(服务器)的目录
    47. */
    48. public static function ftp_read($filename,$filepath)
    49. {
    50. $curl = curl_init();
    51. $target_ftp_file = "ftp://".self::$host.":".self::$port."/".self::$readdir."/".$filename;//完整路径
    52. curl_setopt($curl, CURLOPT_URL,$target_ftp_file);
    53. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    54. curl_setopt($curl, CURLOPT_VERBOSE, 1);
    55. curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0);
    56. curl_setopt($curl, CURLOPT_TIMEOUT, 300); // times out after 300s
    57. curl_setopt($curl, CURLOPT_USERPWD,self::$usrname.':'.self::$pwd);//FTP用户名:密码
    58. // Sets up the output file
    59. //本地保存目录
    60. if(is_dir($filepath)){
    61. $outfile = fopen($filepath.$filename, 'w');//保存到本地的文件名
    62. curl_setopt($curl,CURLOPT_FILE,$outfile);
    63. // Executes the cURL
    64. $info = curl_exec($curl);
    65. fclose($outfile);
    66. $error_no = curl_errno($curl);
    67. curl_close($curl);
    68. //成功读取文件,返回 true
    69. if($info){
    70. return true;
    71. }
    72. }
    73. }
    74. }
    75. ?>

curl文件上传有两种方式,一种是post_fileds,一种是infile的更多相关文章

  1. php curl文件上传兼容php5.0~5.6各版本

    PHP 5.0~5.6 各版本兼容的cURL文件上传 最近做的一个需求,使用PHP cURL上传文件.踩坑若干,整理如下. 不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POS ...

  2. 利用Selenium实现图片文件上传的两种方式介绍

    在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当 ...

  3. linux 下文件上传的两种工具(XFTP5和Putty之pscp)方式

    一.使用XFTP(,需要先在LINUX上安装启用FTP服务) 然后,在WINDOWS上启动XFPT6客户端,将下载的文件上传至LINUX 指定目录: 二.使用PUTTY软件安装目录下的PSCP命令 1 ...

  4. SpringBoot从入门到精通十一(SpringBoot文件上传的两种方法)

    前言 在企业级项目开发过程中,上传文件是最常用到的功能.SpringBoot集成了SpringMVC,当然上传文件的方式跟SpringMVC没有什么出入. 本章目标 使用SpringBoot项目完成单 ...

  5. C#实现Web文件上传的两种方法

    1. C#实现Web文件的上传 在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛. 那么使用C#如何实现文件上传的功能呢?下面笔 ...

  6. [转]考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传

    FROM : https://segmentfault.com/a/1190000000725185 最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件. ...

  7. python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,

    python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...

  8. PHP 5.0~5.6 各版本兼容性的 cURL 文件上传

    不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cU ...

  9. 考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传

    最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件.踩坑若干,够一篇文章了. 重要警告 没事不要读PHP的官方中文文档!版本跟不上坑死你! 不同版本PHP ...

随机推荐

  1. Es使用。

    http://jingyan.baidu.com/article/3052f5a1e8a06397f31f8699.html --------------------------- http://el ...

  2. stringbuffer与stringbuilder的区别?

    1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们 ...

  3. 怎么样能让自己的虚拟机上网win7 for linux

    我的电脑是win7 32位 虚拟机是linux 我是通过无线连接互联网的 点无线网络连接 右键 点共享 按照我的方式设置 接下来进入 里面会自动的选择这个 如果没有可以自己按照这个设置 接下来进入虚拟 ...

  4. C++:delete和delete[]释放内存的区别

      C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[].  关于 new[] 和 delete[], ...

  5. ftp下载显示进度

    经常用到ftp get命令下载东西,但是遇到大的文件不知道是挂了还是在运行,要是能显示就好了,于是就有了下文... 注: 红色 字体是我敲击的命令 “#” 是注释语 [root@localhost s ...

  6. J2EE如何生成验证码图片和点击刷新验证码

    验证码图片生成步骤 创建BufferedImage对象. 获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象. 调用Graphics对象的setColo ...

  7. Android电源管理-休眠简要分析

    一.开篇 1.Linux 描述的电源状态 - On(on)                                                 S0 -  Working - Standb ...

  8. emplace_back减少内存拷贝和移动

    --------<深入应用C++11:代码优化与工程级应用>第2章使用C++11改进程序性能,本章将分别介绍右值引用相关的新特性.本节为大家介绍emplace_back减少内存拷贝和移动. ...

  9. svn:revert to this version 和 revert changes from this version的区别

    假设我们有许多个版本,版本号分别是1-10 如果我们在7这里选择revert to this version那么7之后的8,9,10的操作都会被消除 如果在7选择revert changes from ...

  10. Python3 学习第八弹: 模块学习一之模块变量

    __name__变量 用于判断该python文件是否作为主程序运行.若该文件为导入,__name__值为其文件名,若为主程序,则其值为__main__ 这也就是为什么经常看到有一些python文件中有 ...