多部分表单数据:使用 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中文网其他相关文章!