file_get_contents('php://input') 不适用于 Laravel+Octane / Swoole

file_get_contents('php://input') not working on Laravel+Octane / Swoole

我正在从 Laravel 8 迁移到 Laravel 8 + Octane / Swoole。一切正常,但 php://input 总是空的。另外,我检查 $_POST 和 $_SERVER 值。

file_get_contents('php://input')AWS SNS Message Validator 使用。

阅读 php://input 有什么改变吗?

PHP代码

echo "php://input: ".file_get_contents('php://input');

使用PHP-FPM

$ curl -i -X POST --data "dataaaa" https://example.com/aws/sns/webhook
php://input: dataaaa

使用 Octane+Swoole

$ curl -i -X POST --data "dataaaa" https://example.com/aws/sns/webhook
php://input:

问题

php://input 在 Swoole 上不可用。总是相同的 运行 过程。

解决方案:PSR-7 请求

use Psr\Http\Message\RequestInterface;

public function sesSubscriptionWebhook(RequestInterface $request)
{
    // $input = file_get_contents('php://input'); // dont work on swoole
    $input = $request->getBody();
}

当然,对于 octane,symfony/psr-http-message-bridgenyholm/psr7Laravel PSR-7 requests 所必需的。

此外,如果您的问题与 AWS SES 有关,您需要将 Message::fromRawPostData() 更改为 Message::fromPsrRequest($request)