热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用curl实现远程数据提交,支持文件上传.

不作赘述,请看程序中的注释和具体运行效果example.php:

不作赘述,请看程序中的注释和具体运行效果

example.php:

if ($_SERVER['REQUEST_METHOD']=='POST')
{
 require_once("client.php");
 
 $curl = new CurlForm("http://pams.cn/server.php");
 $curl->post();
}
?>









client.php:

/**
 * Class CurlForm
 *
 * submit form data to a remote server use CURL
 * file upload support
 *
 * @link        http://www.pams.cn
 * @author      Gavin yang
 * @msn:        athotmail88 @ hotmail.com
 */
class CurlForm
{
 /**
     * url where you want to submit the form
     * @var String
     */
  private $remoteUrl;
 
 /**
     * form vars
     * @var Array
     */
  private $postvars = array();
 
 /*
 * Constructor for CurlForm
 * @param String $remoteUrl url where you want to submit the form
 */
 public function __construct($remoteUrl)
 {
  $this->remoteUrl = $remoteUrl;

/*处理提交上来的表单变量,将post变量和files变量同时放入$this->postvars 中,注意,这里是返回的是数组,当然如果只是post变量也可以是字符串"a=b&c=d"的形式,如果含有files变量,就只能放在数组里面*/
  if(isset($_POST))
  {
   foreach ($_POST as $var => $val)
   {
    $this->postvars[$var] = $val;
   }
  }

/*上传文件的过程实际上分两步,第一步将文件上传到本地服务器,然后取得文件在本地服务器的缓存地址,也就是tmp_name;第二步是将这个缓 存文件的数据发送到远程服务器,当然读取文件数据的过程已经在curl函数内部实现了,只要你在文件地址前面加上"@",curl就会认为这是个要传送的 附件,但要保证这个文件是真实存在的。这样远程服务器端就接收到本地服务器提交过去的表单,由于向远程服务器上传的文件是本地服务器上的缓存文件,所以要 取得原始文件的文件名,在post变量里我给增加了一个叫做'filename'的变量,它是和files变量一一对应的*/
  if(isset($_FILES))
  {
   foreach ($_FILES as $var => $val)
   {
    if (is_array($val['tmp_name']))
    {
     foreach ($val['tmp_name'] as $k=>$fname)
     {
      $this->postvars[$var."[$k]"]= "@".$fname;
      $this->postvars['filename'."[$var][$k]"]=  $val['name'][$k];
     }
    }
    else
    {
     $this->postvars[$var] = "@".$val['tmp_name'];
     $this->postvars['filename'."[$var]"] = $val['name'];
    }
   }
  }
 }

 /*
 * post form to remote server
 */
 public function post()
 {
  set_time_limit(0);
     $ch = curl_init();
  //设定远程地址
     curl_setopt($ch, CURLOPT_URL, $this->remoteUrl );
  //post方法
     curl_setopt($ch, CURLOPT_POST, 1);
  //表单变量
     curl_setopt($ch, CURLOPT_POSTFIELDS, $this->postvars);
  //设定是否直接显示返回的数据
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  //设定是否显示头信息
  curl_setopt($ch, CURLOPT_HEADER, false);
  //设定是否直接输出页面内容 false为输出
  curl_setopt($ch, CURLOPT_NOBODY, false);
  curl_exec($ch);
  //出错则显示错误并退出
        curl_errno($ch) && die(curl_error($ch));
  //关闭资源
     curl_close($ch);
  exit();
 }
}
?>


server.php

print_r($_POST);
print_r($_FILES);
?>

打包下载 curl.rar


推荐阅读
  • UEditor可以如何直接复制word的图文内容到编辑器中
    这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)j ... [详细]
  • 原文转自:http:blog.csdn.netchinasoftosgarticledetails7903045UploadAction.java:packagecr ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 在tp5项目中引入ueditor编辑器并实例化后插入图片出现目录创建失败问题在查看网络上各种解决方案之后总结如下:根据官网提示主要是因为图片保存的路径无权限导致,官方文档链接:ht ... [详细]
  • fileuploadJS@sectionscripts{<scriptsrc~Contentjsfileuploadvendorjquery.ui.widget.js ... [详细]
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
  • 开发笔记:UEditor调用上传图片上传文件等模块
    1、引入ue相关文件,写好初始代码为了更好的封装整一个单独的插件,这里我们要做到示例化ue后隐藏网页中的编辑窗口,并移除焦点。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
author-avatar
秋老虎丶_628
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有