如何使用帶有多部分內容類型和邊界的 file_get_contents() 上傳檔案?

DDD
發布: 2024-10-18 12:30:30
原創
970 人瀏覽過

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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!