ackneal / multipart
1.0.0
2020-05-02 05:19 UTC
Requires
- php: >=5.6
- guzzlehttp/psr7: ^1.6
- psr/http-message: ^1.0
Requires (Dev)
- phpunit/phpunit: >=5.7
This package is auto-updated.
Last update: 2024-09-16 14:02:02 UTC
README
Multipart 是 PHP MIME 多部分解析库,使得获取多部分体中的单个部分变得容易。
$message = <<<EOT This is the preamble. It is to be ignored, though it is a handy place for mail composers to include an explanatory note to non-MIME compliant readers. --simple boundary This is implicitly typed plain ASCII text. It does NOT end with a linebreak. --simple boundary Content-type: text/plain; charset=us-ascii This is explicitly typed plain ASCII text. It DOES end with a linebreak. --simple boundary-- This is the epilogue. It is also to be ignored. EOT; $stream = new \Multipart\Stream($message, 'simple boundary'); while ($part = $stream->readPart()) { echo $part->getHeaderLine('content-type') . PHP_EOL; echo $part->getBody() . PHP_EOL; } /** * * This is implicitly typed plain ASCII text. * It does NOT end with a linebreak. * text/plain; charset=us-ascii * This is explicitly typed plain ASCII text. * It DOES end with a linebreak. */
示例
适用于 HTTP 多部分/form-data(RFC 2388)
$message = <<<EOT --simple boundary Content-Disposition: form-data; name="foo"; filename="bar.txt" Content-Length: 3 Content-Type: text/plain foobar --simple boundary-- EOT; $stream = new \Multipart\Stream($message, 'simple boundary'); $part = $stream->readPart(); echo $part->getFormName() . PHP_EOL; // foo echo $part->getFileName() . PHP_EOL; // bar.txt echo $part->getBody() . PHP_EOL; // foobar
处理 HTTP 多部分/* 请求
preg_match('/^multipart\/.+; boundary=(?<boundary>.+)$/', $_SERVER['CONTENT_TYPE'], $m); $stream = new \Multipart\Stream(fopen('php://input', 'r'), $m['boundary']);