0

我有一个框架,php://input在 sabredav 可以在 PUT 上使用它之前就吃光了。

有没有办法调用 setBody()Sabre\HTTP\Request以便我可以从我的框架(http://kohanaframework.org)传递它,这样 getBody() 就不会尝试从空白 php://input中获取它?

我想尽量避免黑客攻击Sabre\DAV\Server和/或Sabre\HTTP\Request但不确定最好的方法是什么。

框架“包装”代码在这里(在 Sabredav 示例中实现 server.php)

https://github.com/chrisgo/kohana-sabredav/blob/master/classes/Kohana/Controller/Webdav.php


原始问题: SabreDAV + Nginx + PUT(创建 0 字节文件)

4

1 回答 1

1

最干净的解决方案似乎是创建一个插件来拦截 PUT 方法并将主体设置回 sabredav 期望的位置

public function httpPutInterceptor($method, $uri) {
    $this->server->httpRequest->setBody($this->body);
}

完整模块:https ://github.com/chrisgo/kohana-sabredav

...现在我只需要弄清楚为什么 nginx 在二进制文件PUT和文本文件上返回 405 PUT(正确的行为,将其传递给 PHP)

于 2013-12-20T06:08:57.110 回答