多部分錶單資料:使用cURL 在PHP 中傳送檔案字串
在許多場景下,開發者可能會遇到需要同時提交表單資料和使用HTTP POST 請求的文件。處理儲存在檔案系統上的檔案時,過程很簡單:在 CURLOPT_POSTFIELDS 中為檔案路徑加上「@」前綴,使 cURL 能夠處理檔案上傳。
但是,問題出現了:是否可以繞過文件創建過程並使用 cURL 直接將文件內容作為字串發送?
答案是肯定的,如下面的解決方案所示。透過手動建構表單資料主體並設定適當的標頭,我們可以模擬網頁瀏覽器的表單提交行為:
<code class="php">// Form field separator $delimiter = '-------------' . uniqid(); // File upload fields: name => array(type => 'mime/type', content => 'raw data') $fileFields = array( 'file1' => array( 'type' => 'text/plain', 'content' => '...your raw file content goes here...' ), /* ... */ ); // Non-file upload fields: name => value $postFields = array( 'otherformfield' => 'content of otherformfield is this text', /* ... */ ); $data = ''; // Populate non-file fields first foreach ($postFields as $name => $content) { $data .= "--" . $delimiter . "\r\n"; $data .= 'Content-Disposition: form-data; name="' . $name . '"'; $data .= "\r\n\r\n"; } // Populate file fields foreach ($fileFields as $name => $file) { $data .= "--" . $delimiter . "\r\n"; $data .= 'Content-Disposition: form-data; name="' . $name . '";' . ' filename="' . $name . '"' . "\r\n"; $data .= 'Content-Type: ' . $file['type'] . "\r\n"; $data .= "\r\n"; $data .= $file['content'] . "\r\n"; } // Last delimiter $data .= "--" . $delimiter . "--\r\n"; $handle = curl_init($url); curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_HTTPHEADER , array( 'Content-Type: multipart/form-data; boundary=' . $delimiter, 'Content-Length: ' . strlen($data))); curl_setopt($handle, CURLOPT_POSTFIELDS, $data); curl_exec($handle);</code>
按照以下步驟,我們可以使用文件內容字串建構多部分錶單資料並提交它使用cURL,無需建立臨時檔案。這種方法為開發人員在 PHP 應用程式中處理文件上傳提供了更大的控制力和靈活性。
以上是是否可以直接使用cURL發送文件內容字串而不建立臨時文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!