PHP:curl模拟form表单上传文件

2023-05-16

<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="upload">
<buttion>submit</button>
</form>

需要模拟的就是上面form表单。

  • 正文的开始

   // form.php

   /**
    * curl Post文件,php5以下版本可用
    * 
    * @param $action (处理上传文件的url,form表单的action)
    * @param $path (文件路径)
    **/
    function upload_file($action, $path){
        $data = array(
            // 需要注意的是,在路径前必须带上@,不然只会当做是简单的键值对
            'pic'   =>  '@'.realpath($path)
            'name'  =>  'issac'
        );

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $action);
        curl_setopt($ch, CURLOPT_POST, true );
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  //该curl_setopt可以向header写键值对
        curl_setopt($ch, CURLOPT_HEADER, false); // 不返回头信息
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;       
    }
    

    // 调用
    upload_file('accrpt.php', '/files/img.png');
// accept.php
print_r($_FILES);  // 输出上传到服务器的临时文件的信息
print_r($_POST);  // name => issac

curl_setop设置选项

PS:上面例子只有在php5以下版本有效,换言之现在根本没有用 根本没有用 根本没有用 [手动摔桌子],而且现在网上充斥的全是这种过时的失效版本

@字符什么,现在根本没有用了,不要怀疑你自己,还有网上说只要加上:

curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);  

就能起效,不用怀疑,这也是没有效的[手动摔桌子],这个选项已经弃用了,现在。

Paste_Image.png

Paste_Image.png

  • 以下才是现在真实有效的做法:

用curlFile代替@,也不需要使用 CURLOPT_SAFE_UPLOAD

$data = array(
   'pic'=>new CURLFile($path)
   // 如果无效可以这样
   // 'pic'=>curl_file_create($path)
);

替换

$data = array(
  'pic'=>'@'.realpath($path)
);

CURLFILE类的详细使用

Paste_Image.png

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP:curl模拟form表单上传文件 的相关文章

随机推荐

  • HTTP消息中header头部信息的讲解

    HTTP Request的Header信息 1 HTTP请求方式 如下表 xff1a GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并存储在Web服务器内部 HEA
  • HTTP 状态码

    HTTP状态码 当浏览者访问一个网页时 xff0c 浏览者的浏览器会向网页所在服务器发出请求 当浏览器接收并显示网页前 xff0c 此网页所在的服务器会返回一个包含HTTP状态码的信息头 xff08 server header xff09
  • HTTP请求的header头解析

    Request Headers xff1a 下图是我访问一个URL xff1a http www hzau edu cn 的一个 header 根据具体实例来分析一下各部分的功能及其作用 Accept 作用 xff1a 浏览器端可以接受的媒
  • http请求消息体和响应消息体

    http www cnblogs com mydomain archive 2012 11 05 2754487 html HTTP 基于请求与响应模式的 无状态的 应用层的协议 xff0c 常基于TCP 的连接方式 HTTP 允许传输任意
  • HTTP Header 详解

    HTTP Header 详解 HTTP xff08 HyperTextTransferProtocol xff09 即超文本传输协议 xff0c 目前网页传输的的通用协议 HTTP协议采用了请求 响应模 型 xff0c 浏览器或其他客户端发
  • PHP模拟http请求

    http flandycheng blog 51cto com 855176 251752 方法一 xff1a 利用php的socket编程来直接给接口发送数据来模拟post的操作 建立两个文件post php getpost php po
  • HTTP 消息结构

    HTTP是基于客户端 服务端 xff08 C S xff09 的架构模型 xff0c 通过一个可靠的链接来交换信息 xff0c 是一个无状态的请求 响应协议 一个HTTP 34 客户端 34 是一个应用程序 xff08 Web浏览器或其他任
  • php 构造http头 php模拟http请求 伪装头部信息

    http jingyan baidu com article 335530daafcd6019ca41c352 html lt php 构造 http 请求 filename 61 34 http sj mjerp com dabenyin
  • 使用驱动器中J:的光盘之前需要将其格式化。

    http tieba baidu com p 3203627680 不知道神马原因致使U盘无法打开 大家千万注意 xff1a 以后遇见这种情况千万别格式化 xff08 当然如果你的U盘或者硬盘里没有重要东西那就另当别论 xff09 xff0
  • 404、500、502等HTTP状态码介绍

    一些常见的状态码为 xff1a 200 服务器成功返回网页 404 请求的网页不存在 503 服务不可用 详细分解 xff1a 1xx xff08 临时响应 xff09 表示临时响应并需要请求者继续执行操作的状态代码 代码 说明 100 x
  • 2020年电赛题目,命题专家权威解析!

    关注 星标公众号 xff0c 直达精彩内容 来源 xff1a 德州仪器TI校园计划 大学生电子设计竞赛培训网上次发了关于电赛题目前三道题目解析的视频 xff1a 2020年电赛题目 xff0c 命题专家们怎么看 xff1f xff0c 这篇
  • php curl请求信息和返回信息设置代码实例

    在用curl抓取网页内容的时候 xff0c 经常要知道 xff0c 网页返回的请求头信息 xff0c 和请求的相关信息 xff0c 特别是在请求过程中存在重定向的时候获取请求返回头信息对分析请求内容很有帮助 下面就是一个请求中存在重定向的例
  • URL特殊字符转义

    问题描述 xff1a 在工作中 xff0c 因为需要将另外一个系统的一批产品转移到自己系统 xff0c 产品基础资料什么的 xff0c 都没问题 xff0c 直接给字段插入数据库就好 xff0c 但是遇到了图片的问题 xff0c 图片是在别
  • PHP中GET/POST方法参数传递空格+逗号等特殊字符处理办法

    自己在项目开发中写了个自用接口 xff0c 用GET方法传参 xff08 用户名和密码 xff09 最近收到用户反馈 xff1a 密码为特殊字符时会出错 我一开始想是不是php的mysql real escape string函数将特殊字符
  • canvas 背景透明

    theCanvas 61 document getElementById 39 canvasOne 39 var context 61 theCanvas getContext 39 2d 39 context fillStyle 61 3
  • Http压力测试工具HttpTest4Net

    HttpTest4Net是一款基于C 实现的和HTTP压力测试工具 通过工具可以简单地对HTTP服务进行一个压力测试 虽然VS NET也集成了压力测试项目 但由于VS自身占用的资源导致了在配置不高的PC上难以做到高并发压力测试 再加上需要装
  • PHP获取今天、昨天、明天的日期

    php view plain copy lt php echo 34 今天 34 date 34 Y m d 34 34 lt br gt 34 echo 34 昨天 34 date 34 Y m d 34 strtotime 34 1 d
  • Http协议与TCP协议简单理解

    https blog csdn net sundacheng1989 article details 28239711 在C 编写代码 xff0c 很多时候会遇到Http协议或者TCP协议 xff0c 这里做一个简单的理解 TCP协议对应于
  • LINUX重启MYSQL的命令

    LINUX重启MYSQL的命令 标签 xff1a mysqllinuxservice脚本web服务server 2010 06 25 10 21 62152人阅读 评论 0 收藏 举报 分类 xff1a Linux xff08 6 xff0
  • PHP:curl模拟form表单上传文件

    lt form action 61 34 34 method 61 34 post 34 enctype 61 34 multipart form data 34 gt lt input type 61 34 file 34 name 61