マルチパート フォーム データ: cURL を使用した PHP でのファイル文字列の送信
多くのシナリオで、開発者はフォーム データとフォーム データの両方を送信する必要がある場合があります。 HTTP POST リクエストを使用してファイルを作成します。ファイルシステムに保存されているファイルを扱う場合、プロセスは簡単です。CURLOPT_POSTFIELDS でファイル パスの先頭に「@」を付けると、cURL がファイルのアップロードを処理できるようになります。
しかし、疑問が生じます。ファイル作成プロセスを実行し、cURL を使用してファイルの内容を文字列として直接送信しますか?
以下の解決策で示すように、答えは「はい」です。フォーム データ本体を手動で構築し、適切なヘッダーを設定することで、Web ブラウザのフォーム送信動作をシミュレートできます。
<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 中国語 Web サイトの他の関連記事を参照してください。