我必须编写一些东西来处理通过 POST 发送的 XML 文档。该文档内部包含 base-64 编码的二进制文件,因此请求可能非常大。
这有效:
$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
吗?或者,还有更好的方法?
请注意:我正在寻找基于流的解决方案;不要将整个流作为字符串读入内存。