我陷入了这个奇怪的问题。
<?php
require_once __DIR__ . "/vendor/autoload.php";
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// connect to mongodb
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$command = new MongoDB\Driver\Command(array("ping" => 1));
$result = $manager->executeCommand("test", $command);
var_dump($result, $result->toArray());
?>
Run Code Online (Sandbox Code Playgroud)
错误:
Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionTimeoutException: No suitable servers found (`serverSelectionTryOnce` set): [connection refused calling ismaster on 'localhost:27017'] in /var/www/html/mongo.php:11 Stack trace: #0 /var/www/html/mongo.php(11): MongoDB\Driver\Manager->executeCommand('test', Object(MongoDB\Driver\Command)) #1 {main} thrown in /var/www/html/mongo.php on line 11
Run Code Online (Sandbox Code Playgroud)
为什么奇怪?好吧,我已经尝试过在互联网上搜索这个问题,人们总是说同样的话:
好...
它不是脱机的,我的Java应用程序(和“ mongo”)可以很好地连接到MongoDB服务器,并且可以与数据库进行交互而不会引发ConnectionTimeoutException。
try {
mongoClient = new MongoClient( "localhost" );
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
它没有损坏,因为如果它损坏了,我将无法通过Java连接它(对吗?)
我已经尝试连接到127.0.0.1和localhost,同样的问题。
我已经尝试过重新启动httpd和mongod,同样的问题。
我已经尝试将MongoDB服务器绑定到0.0.0.0而不是127.0.0.1,这是相同的问题。
是的,已安装MongoDB驱动程序,它们在PHP Info中处于活动状态。
MongoDB PHP版本:1.2.1
MongoDB Shell版本:3.2.10(现在更新为3.4.0)
PHP版本:7.0.13
好的,我想我应该再说一遍如何解决此问题(感谢@jmikola!)
https://github.com/mongodb/mongo-php-driver/issues/484
您需要使用
setsebool -P httpd_can_network_connect on
Run Code Online (Sandbox Code Playgroud)
解决该问题。