Мне нужно написать что-то для обработки XML-документа, отправленного через POST. В документе есть двоичные файлы с кодировкой base-64, поэтому запрос может быть довольно большим.Пропустить поток, завернутый Zend Diactoros PhpInputStream (PSR-7 StreamInterface) для функции типа fopen?
Это работает:
$document = simplexml_load_file('php://input');
Но я с помощью реализации Zend Diactoros PSR-7 так на самом деле я должен делать что-то вроде этого:
$request = Zend\Diactoros\ServerRequestFactory::fromGlobals();
$document = simplexml_load_file($request->getBody());
Однако, что вызывает поток так, чтобы приведение к строке, которая приводит к ошибке.
Что мне действительно нужно что-то вроде:
$document = simplexml_load_file($request->getBody()->stream);
Потому что:
var_dump($request->getBody());
object(Zend\Diactoros\PhpInputStream)#5 (4) {
["cache":"Zend\Diactoros\PhpInputStream":private] => string(0) ""
["reachedEof":"Zend\Diactoros\PhpInputStream":private ] => bool(false)
["resource":protected] => resource(4) of type (stream)
["stream":protected] => string(11) "php://input"
}
Но заметьте ->stream
защищен. Должен ли я просто продлить Zend\Diactoros\PhpInputStream
и написать публичный метод для публикации ->stream
? Или есть лучший способ?
Обратите внимание: Я ищу решение на основе потока; не читать весь поток в памяти в виде строки.