随后调用时找不到类 "MongoDB\Driver\Manager"



所以我有一个小的webhook端点,它用JSON数据调用,然后将这些数据存储到远程MongoDB Atlas数据库中。除了数据库执行之外,所有事情都在本地发生。

  • 环境:Ubuntu 20.04.2 LTS
  • 服务:Apache2
  • PHP:8.0.3
  • MongoDB:1.8.0//通过composer安装,composer.json中需要,php.ini中启用扩展

为了模拟这些请求,我在本地构建了一个PHP脚本sender.php,该脚本通过卷曲向本地安装的Web服务器发出POST请求,并将其发送到接收文件listener.php

当我直接执行listener.php时,它运行良好,所有数据都会通过并写入远程MongoDB Atlas数据库。但当它从我的webhook文件sender.php调用时,我会得到以下错误:

PHP Fatal error:  Uncaught Error: Class "MongoDB\Driver\Manager" not found

这里是最基本的代码文件,我可以用它来重现错误。

composer.json

{
"require": {
"mongodb/mongodb": "^1.8"
}
}

sender.php

$url = "http://localhost/listener.php";
$data = array(
"id" => "12345",
"title" => "Test",
"status" => "updated"
);
$ch = curl_init($url);
$payload = json_encode($data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Accept:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

listener.php

require 'vendor/autoload.php';
$incomingWebhookData = json_decode(file_get_contents('php://input'));
function submitToDb($database, $collection, $data)
{
$manager = new MongoDBDriverManager(
'mongodb+srv://<user_placeholder>:<password_placeholder>@<cluster_placeholder>.mongodb.net/?retryWrites=true&w=majority'
);
$bulk = new MongoDBDriverBulkWrite;

$doc = [
"_id" => new MongoDBBSONObjectID,
"data_id" => $data->id,
"title" => $data->title,
"status" => $data->status,
];
$bulk->insert($doc);
$manager->executeBulkWrite($database . "." . $collection, $bulk);
}
$database = "webhook_data";
$collection = "internal";
submitToDb($database, $collection, $incomingWebhookData);
  • 我尝试过在listener.php->同样的事情
  • 重新启动所有服务,转储自动加载,从头开始重新安装所有内容->同样的事情

我错过了什么全球灾难?

感谢您抽出时间帮助

事实证明,我的本地Web服务器(Apache2(使用的PHP-CLI与我的开发环境不同,因此,一旦将请求解析到Web服务器,所有启用的扩展和配置都没有效果。

使用docker儿童。

最新更新