ホームページ  >  記事  >  バックエンド開発  >  一時ファイルを作成せずに、cURL を使用してファイル コンテンツ文字列を直接送信できますか?

一時ファイルを作成せずに、cURL を使用してファイル コンテンツ文字列を直接送信できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-17 18:32:02983ブラウズ

Can You Send File Content Strings Directly Using cURL Without Creating Temporary Files?

マルチパート フォーム データ: 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。