使用 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中文网其他相关文章!