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-bridge
和 nyholm/psr7
是 Laravel PSR-7 requests 所必需的。
此外,如果您的问题与 AWS SES 有关,您需要将 Message::fromRawPostData()
更改为 Message::fromPsrRequest($request)
。
我正在从 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-bridge
和 nyholm/psr7
是 Laravel PSR-7 requests 所必需的。
此外,如果您的问题与 AWS SES 有关,您需要将 Message::fromRawPostData()
更改为 Message::fromPsrRequest($request)
。