首页 > 后端开发 > php教程 > 如何使用带有多部分内容类型和边界的 file_get_contents() 上传文件?

如何使用带有多部分内容类型和边界的 file_get_contents() 上传文件?

DDD
发布: 2024-10-18 12:30:30
原创
1106 人浏览过

How to Upload Files Using file_get_contents() with Multipart Content-Type and Boundary?

使用 file_get_contents() 上传文件

虽然 cURL 提供了一种简单的文件上传方法,但可以利用 file_get_contents() 函数http 流上下文。此方法涉及创建具有定义边界的多部分内容类型请求。

多部分内容类型和边界:

多部分内容类型在 HTTP 中启用多个部分请求正文。边界字符串与正文内容不同,充当各部分之间的分隔符。以下是定义边界的方法:

<code class="php">define('MULTIPART_BOUNDARY', '--------------------------' . microtime(true));</code>
登录后复制

HTTP 标头和内容正文:

Content-Type 标头指定 Web 服务器的边界:

<code class="php">$header = 'Content-Type: multipart/form-data; boundary=' . MULTIPART_BOUNDARY;</code>
登录后复制

接下来,通过为每个文件和字段创建部分来构建内容主体:

<code class="php">define('FORM_FIELD', 'uploaded_file');

$filename = "/path/to/uploaded/file.zip";
$file_contents = file_get_contents($filename);

$content = "--" . MULTIPART_BOUNDARY . "\r\n" .
            "Content-Disposition: form-data; name=\"" . FORM_FIELD . "\"; filename=\"" . basename($filename) . "\"\r\n" .
            "Content-Type: application/zip\r\n\r\n" .
            $file_contents . "\r\n";</code>
登录后复制

根据需要添加其他 POST 字段:

<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "\r\n" .
            "Content-Disposition: form-data; name=\"foo\"\r\n\r\n" .
            "bar\r\n";</code>
登录后复制

结束请求尾随边界:

<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "--\r\n";</code>
登录后复制

流上下文和执行:

创建流上下文:

<code class="php">$context = stream_context_create(array(
    'http' => array(
          'method' => 'POST',
          'header' => $header,
          'content' => $content,
    )
));</code>
登录后复制

最后,执行上传:

<code class="php">file_get_contents('http://url/to/upload/handler', false, $context);</code>
登录后复制

注意:发送二进制文件之前不要对其进行编码,因为 HTTP 可以处理二进制数据。

以上是如何使用带有多部分内容类型和边界的 file_get_contents() 上传文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板