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