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

DDD
Release: 2024-10-18 12:30:30
Original
970 people have browsed it

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

Uploading Files with file_get_contents()

While cURL offers a straightforward method for file uploads, it's possible to leverage the file_get_contents() function with the http stream context. This approach involves creating a multipart Content-Type request with a defined boundary.

Multipart Content-Type and Boundary:

Multipart Content-Type enables multiple parts in the HTTP request body. A boundary string, distinct from the body content, acts as the delimiter between parts. Here's how to define a boundary:

<code class="php">define('MULTIPART_BOUNDARY', '--------------------------' . microtime(true));</code>
Copy after login

HTTP Header and Content Body:

The Content-Type header specifies the boundary to the web server:

<code class="php">$header = 'Content-Type: multipart/form-data; boundary=' . MULTIPART_BOUNDARY;</code>
Copy after login

Next, build the content body by creating parts for each file and field:

<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>
Copy after login

Add additional POST fields as needed:

<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "\r\n" .
            "Content-Disposition: form-data; name=\"foo\"\r\n\r\n" .
            "bar\r\n";</code>
Copy after login

End the request with a trailing boundary:

<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "--\r\n";</code>
Copy after login

Stream Context and Execution:

Create the stream context:

<code class="php">$context = stream_context_create(array(
    'http' => array(
          'method' => 'POST',
          'header' => $header,
          'content' => $content,
    )
));</code>
Copy after login

Finally, execute the upload:

<code class="php">file_get_contents('http://url/to/upload/handler', false, $context);</code>
Copy after login

Note: Do not encode binary files before sending them, as HTTP can handle binary data.

The above is the detailed content of How to Upload Files Using file_get_contents() with Multipart Content-Type and Boundary?. For more information, please follow other related articles on the PHP Chinese website!

source:php
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!