riverline/multipart-parser
Lightweight PHP multipart/form-data parser for handling HTTP uploads and mixed multipart bodies. Extracts fields and files from raw request streams with low memory use, suited for PSR-7 or custom servers needing reliable multipart boundary parsing.
Riverline\MultiPartParse is a one class library to parse multipart documents (multipart email, multipart form, etc ...)
and manage each part encoding and charset to extract their content.
Riverline\MultiPartParse is compatible with composer and any psr-0/psr-4 autoloader.
composer require riverline/multipart-parser
<?php
use Riverline\MultiPartParser\StreamedPart;
// Prepare a test stream
$data = <<<EOL
User-Agent: curl/7.21.2 (x86_64-apple-darwin)
Host: localhost:8080
Accept: */*
Content-Type: multipart/form-data; boundary=----------------------------83ff53821b7c
------------------------------83ff53821b7c
Content-Disposition: form-data; name="foo"
bar
------------------------------83ff53821b7c
Content-Transfer-Encoding: base64
YmFzZTY0
------------------------------83ff53821b7c
Content-Disposition: form-data; name="upload"; filename="text.txt"
Content-Type: text/plain
File content
------------------------------83ff53821b7c--
EOL;
$stream = fopen('php://temp', 'rw');
fwrite($stream, $data);
rewind($stream);
$document = new StreamedPart($stream);
if ($document->isMultiPart()) {
$parts = $document->getParts();
echo $parts[0]->getBody(); // Output bar
// It decode encoded content
echo $parts[1]->getBody(); // Output base64
// You can also filter by part name
$parts = $document->getPartsByName('foo');
echo $parts[0]->getName(); // Output foo
// You can extract the headers
$contentDisposition = $parts[0]->getHeader('Content-Disposition');
echo $contentDisposition; // Output Content-Disposition: form-data; name="foo"
// Helpers
echo StreamedPart::getHeaderValue($contentDisposition); // Output form-data
echo StreamedPart::getHeaderOption($contentDisposition, 'name'); // Output foo
// File helper
if ($parts[2]->isFile()) {
echo $parts[2]->getFileName(); // Output text.txt
echo $parts[2]->getMimeType(); // Output text/plain
}
}
The library also provides three converters to quickly parse PSR-7, HttpFoundation and native requests.
<?php
use \Riverline\MultiPartParser\Converters;
// Parse $_SERVER and STDIN
$document = Converters\Globals::convert();
The old Part parser is now deprecated and replaced with a wrapper class that create a temporary stream
from the string content and call the new StreamedPart parser.
How can I help you explore Laravel packages today?