美文网首页php
php 特殊场景下post文件

php 特殊场景下post文件

作者: Super淳语 | 来源:发表于2022-07-19 10:32 被阅读0次

public function genUploadHeaderAndBody($pathInfo, $getParams, $postParams, $filePath, $uploadNameField = 'file') {
    if (!file_exists($filePath) || empty(filesize($filePath))) {
        return false;
    }

    $delimiter = '------------------' . uniqid();

    $body = self::genPostBody($delimiter, $postParams, $filePath, $uploadNameField);

    $header = array(
        'pathinfo' => $pathInfo,
        'querystring' => http_build_query($getParams),
        'Content-Type' => 'multipart/form-data; boundary=' . $delimiter,
        'Content-Length' => strlen($body),
    );

    return array(
        'header' => $header,
        'body' => $body,
    );
}

private function genPostBody($delimiter, $postParams, $filePath, $uploadNameField) {
    $fp = fopen($filePath, 'r');
    $fileContent = fread($fp, filesize($filePath));
    fclose($fp);

    $data = '';
    $eol = "\r\n";

    // 拼接post参数
    foreach ($postParams as $key => $value) {
        $data .= '--' . $delimiter . "\r\n";
        $data .= 'Content-Disposition: form-data; name="' . $key . "\"\r\n\r\n";
        $data .= $value . "\r\n";
    }

    // 拼接文件流
    $data .= '--' . $delimiter . "\r\n";
    $data .= 'Content-Disposition: form-data; name="' . $uploadNameField . '"; filename="' . basename($filePath) . "\"\r\n";
    $data .= 'Content-Type: application/octet-stream' . "\r\n\r\n";
    $data .= $fileContent . "\r\n";
    $data .= '--' . $delimiter . '--' . "\r\n";
    return $data;
}



public function execute(){
    $pathInfo = '/filecenter/file/upload/';

    $getParams = array(
        'tpl'   => 6,
        'cuid'  => 'activitycuid',
    );

    $filePath = '/home/zbl/data/z1.jpg';

    $postParams = array(
        'is_public'   => 1,
        'extension'   => 'jpg',
        'mcs_channel' => 'thumbnail',
        'md5'         => md5_file($filePath),
    );

    $getParams['sign'] = 'xxxxxxx';

    $req = self::genUploadHeaderAndBody($pathInfo, $getParams, $postParams, $filePath, 'file');

    if (!$req) {
        echo "error on genUploadHeaderAndBody";
        return;
    }

    $rst = curl('MobileToolsService', 'post', $req['body'], '', $req['header']);

    if ($rst) {
        echo $rst;
    }
    else {
        var_dump($rst);
    }
}

相关文章

  • php 特殊场景下post文件

  • DAY2

    一 文件上传 1.未做任何过滤直接上传php文件即可()

  • 02 PHP

    PHP基本代码 实例 PHP接收POST传值、GET,include文件包含 连接mysql

  • 文件上传的乐趣

    修改php配置文件(php.ini),改变文件上传大小 配置项 post_max_size =1024M ...

  • 笔记

    一 、PHP上传大文件配置修改1、php.iniupload_max_filesize,post_max_size...

  • AngularJS中引入$http服务

    get请求 .html文件 .php文件 post请求两个请求的不同之处:post请求要加上请求头,get请求不需...

  • php 上传大文件注意事项

    php 上传大文件注意事项 php.ini 参数修改 post_max_size upload_max_files...

  • 木马

  • php.ini设置详解

    php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...

  • php漏洞

    php反序列化 php伪协议 php://input可以读取以post方式提交的内容,通常和文件包含放在一起使用。...

网友评论

    本文标题:php 特殊场景下post文件

    本文链接:https://www.haomeiwen.com/subject/uhueirtx.html