Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lade ich Dateien mit file_get_contents() mit mehrteiligem Inhaltstyp und Grenze hoch?

Wie lade ich Dateien mit file_get_contents() mit mehrteiligem Inhaltstyp und Grenze hoch?

DDD
DDDOriginal
2024-10-18 12:30:30971Durchsuche

How to Upload Files Using file_get_contents() with Multipart Content-Type and Boundary?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn