当前位置:首页 > 编程技术 > 正文内容

PHP CURLFile函数模拟实现文件上传展示

yc8882年前 (2022-11-25)编程技术242

PHP CURLFile函数模拟实现文件上传展示

本文为小伙伴们带来了关于PHP CURLFile函数模拟实现文件上传展示,感兴趣的小伙伴一起来看看吧。

一、CURLFile介绍

CURLFile::__construct

(PHP 5 >= 5.5.0, PHP 7)

CURLFile::__construct – curl_file_create — 创建 CURLFile 对象

说明

面向对象风格

?
1
public CURLFile::__construct ( string $filename [, string $mimetype [, string $postname ]] )

过程化风格

?
1
CURLFile curl_file_create ( string $filename [, string $mimetype [, string $postname ]] )

创建 CURLFile 对象,使用 CURLOPT_POSTFIELDS 选项上传文件。

参数

  • filename 被上传文件的 路径。

  • mimetype 被上传文件的 MIME 类型。

  • postname 上传数据里面的文件名。

返回值

返回 CURLFile 对象。

二、使用示例

1、一个单独的函数定义

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public function testUpload01(){
    $file = __DIR__.'assetstest.jpg';
    //var_dump($file);
    //$post['file'] = '@'.$file;
    $obj = new CurlFile($file);
    <span style="color:#ff0000;">$obj->setMimeType("image/jpeg");//必须指定文件类型,否则会默认为application/octet-stream,二进制流文件</span>
    $post['file'] =  $obj;
    $post['abc'] = "abc";
    var_dump($post);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, false);
    //启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
    curl_setopt($ch, CURLOPT_URL, "http://localhost/fs/upload.php");//上传类
    $info= curl_exec($ch);
    curl_close($ch);
    var_dump($info);
    file_put_contents('./1.html',$info);
    $res=json_decode($info,true);
    //var_dump($res);

2、模拟php curl向远程服务器上传文件

第1个文件:test.php 可以向远程服务器模拟提交上传文件的PHP文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!--?php
    header('content-type:text/html;charset=utf8');
    $ch = curl_init();
    //加@符号curl就会把它当成是文件上传处理
    $data = array('img'=-->'@'. dirname(__FILE__).'/img/1.jpg');
    curl_setopt($ch,CURLOPT_URL,"http://localhost:8088/curl/get_img.php");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    $result = curl_exec($ch);
    curl_close($ch);
    echo json_decode($result);
?>

第2个文件:get_img.php 可以接收上传文件的PHP文件

?
1
2
3
4
5
6
7
8
9
10
11
12
<!--?php
if($_FILES){
    $filename = $_FILES['img']['name'];
    $tmpname = $_FILES['img']['tmp_name'];
    if(move_uploaded_file($tmpname,dirname(__FILE__).'/upload/'.$filename)){
        echo json_encode('上传成功');
    }else{
        $data = json_encode($_FILES);
        echo $data;
    }
}
?-->

3、实测可用综合示例

第1个文件 test.php 模拟上传文件的PHP文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--?php
$file = __DIR__.'test.jpg';
$obj = new CurlFile($file);
$obj--->setMimeType("image/jpeg");//必须指定文件类型,否则会默认为application/octet-stream,二进制流文件
$post['file'] =  $obj;
$post['abc'] = "abc";
var_dump($post);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
//启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_URL, "http://locaolhost/test/get_img.php");//上传类
$info= curl_exec($ch);
curl_close($ch);
var_dump($info);
file_put_contents('./1.html',$info);
$res=json_decode($info,true);
?>

第2个文件 get_img.php 接收数据的PHP文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!--?php
print_r($_FILES);
if($_FILES){
    $filename = $_FILES['file']['name'];
    $tmpname = $_FILES['file']['tmp_name'];
    if(move_uploaded_file($tmpname,dirname(__FILE__).'/'.$filename)){
        echo json_encode('SUCCESS');
    }else{
        $data = json_encode($_FILES);
        echo $data;
    }
}
?-->

小结

1、经实际测试,可以使用。如果使用本地签发的SSL证书的https协议,注意本地环境无法测试,可以暂时使用http代替。

线上的https协议可以正常使用。

2、线上在使用curl中转当前服务器上传的文件再次转发到另一个远程服务器时,需要把文件先临时存储到当前服务器,待另一个远程服务器接收并处理完成后再把当前服务器上的临时文件删除即可。


本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10096.html

标签: php
分享给朋友:

“PHP CURLFile函数模拟实现文件上传展示” 的相关文章

【说站】laravel实现自定义404页面并给页面传值

【说站】laravel实现自定义404页面并给页面传值

以 laravel5.8 为例,虽然有自带的404页面,但太简单,我们更希望能自定义404页面,将用户留在站点。实现的方式很简单,将自定义的视图文件命名为 404.blade.php,并放到 reso...

【说站】Thymeleaf报错Error resolving template “XXX”

【说站】Thymeleaf报错Error resolving template “XXX”

修改了一下开源项目的目录结构访问突然报错Error resolving template “XXX”可能原因有如下三种:第一种可能:原因:在使用springboot的过程中,如果使用thymeleaf...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

这篇文章主要介绍了详解Centos8 配置静态IP的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来学习一下!1. 查看自己的网关地址点击虚...

【说站】利用Webhook实现Java项目自动化部署

【说站】利用Webhook实现Java项目自动化部署

用webhook就能实现Java项目自动部署,其实原理很简单。费话不多说,直接往下看教程。1. 创建gitee仓库并初始化2. 在linux安装git3. 在宝塔的软件的商店里下载Webhook4....

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...