ホームページ >バックエンド開発 >PHPチュートリアル >マルチパートコンテンツタイプと境界を指定して file_get_contents() を使用してファイルをアップロードするにはどうすればよいですか?
file_get_contents() を使用したファイルのアップロード
cURL はファイルをアップロードするための簡単な方法を提供しますが、次のように file_get_contents() 関数を利用することもできます。 http ストリーム コンテキスト。このアプローチには、定義された境界を持つマルチパート Content-Type リクエストの作成が含まれます。
Multipart Content-Type と境界:
Multipart Content-Type は、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 中国語 Web サイトの他の関連記事を参照してください。