Dateien mit file_get_contents() hochladen
Während cURL eine unkomplizierte Methode zum Hochladen von Dateien bietet, ist es möglich, die Funktion file_get_contents() mit zu nutzen der HTTP-Stream-Kontext. Bei diesem Ansatz wird eine mehrteilige Content-Type-Anfrage mit einer definierten Grenze erstellt.
Multipart Content-Type und Grenze:
Multipart Content-Type ermöglicht mehrere Teile im HTTP Anfragetext. Eine vom Textinhalt getrennte Begrenzungszeichenfolge fungiert als Trennzeichen zwischen Teilen. So definieren Sie eine Grenze:
<code class="php">define('MULTIPART_BOUNDARY', '--------------------------' . microtime(true));</code>
HTTP-Header und Inhaltstext:
Der Content-Type-Header gibt die Grenze zum Webserver an:
<code class="php">$header = 'Content-Type: multipart/form-data; boundary=' . MULTIPART_BOUNDARY;</code>
Als nächstes erstellen Sie den Inhaltskörper, indem Sie Teile für jede Datei und jedes Feld erstellen:
<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>
Fügen Sie nach Bedarf zusätzliche POST-Felder hinzu:
<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "\r\n" . "Content-Disposition: form-data; name=\"foo\"\r\n\r\n" . "bar\r\n";</code>
Beenden Sie die Anfrage mit eine nachgestellte Grenze:
<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "--\r\n";</code>
Stream-Kontext und Ausführung:
Erstellen Sie den Stream-Kontext:
<code class="php">$context = stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => $header, 'content' => $content, ) ));</code>
Führen Sie abschließend den Upload aus:
<code class="php">file_get_contents('http://url/to/upload/handler', false, $context);</code>
Hinweis: Kodieren Sie Binärdateien nicht vor dem Senden, da HTTP Binärdaten verarbeiten kann.
Das obige ist der detaillierte Inhalt vonWie lade ich Dateien mit file_get_contents() mit mehrteiligem Inhaltstyp und Grenze hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!