问题描述
我正在从 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:
解决方法
问题
[+] Building 10.5s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.2s
=> => transferring dockerfile: 133B 0.0s
=> [internal] load .dockerignore 0.2s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/python:3.9 0.9s
=> [auth] library/python:pull token for registry-1.docker.io 0.0s
=> CACHED [1/3] FROM docker.io/library/python:3.9@sha256:acb4e43d0c66c168e72ceaba5913cde472e4a17017cec9346969c9725a1fea94 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 12.01kB 0.0s
=> [2/3] ADD main.py . 0.5s
=> [3/3] RUN pip install pillow 6.9s
=> exporting to image 1.5s
=> => exporting layers 1.2s
=> => writing image sha256:95e56740a3427899906e9c6522198f5d749fd13870450b046a2bd874b3a04548 0.0s
=> => naming to docker.io/library/background-revolution
在 Swoole 上不可用。始终是同一个运行进程。
解决方案:PSR-7 请求
php://input
当然,对于辛烷值,Laravel PSR-7 requests 需要 use Psr\Http\Message\RequestInterface;
public function sesSubscriptionWebhook(RequestInterface $request)
{
// $input = file_get_contents('php://input'); // dont work on swoole
$input = $request->getBody();
}
和 symfony/psr-http-message-bridge
。
此外,如果您的问题与 AWS SES 相关,您需要将 nyholm/psr7
更改为 Message::fromRawPostData()
。