我可能在这上面花了太多的时间。我使用heroku来部署php和mongodb应用程序。
Heroku mLab通过getenv(' MONGODB_URI ')在php中提供环境变量MONGODB_URI,其中包含标准MongoDBURI,如下所示:
mongodb://<dbuser>:<dbpassword>@dsxxxxxx.mlab.com:31899/heroku_lxxxxxx它已经包含了现有的数据库名称,但php mongodb库教程建议不使用它连接字符串:
$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->demo->beers;所以问题是我能以某种方式使用默认的heroku的MONGODB_URI字符串吗,或者我必须parse_uri它,然后单独提供给php。
发布于 2017-03-22 01:05:19
首先,您需要了解字符串'mongodb://localhost:27017‘是什么。它主要是告诉驱动程序无需身份验证就可以连接到运行在本地主机端口27017上的mongodb服务器。这很简单。现在heroku管理您的数据库,该数据库托管在单独的服务器上,需要授权,因此新代码应该是
$client = new MongoDB\Client("mongodb://<dbuser>:<dbpassword>@dsxxxxxx.mlab.com:31899/heroku_lxxxxxx");现在,上面所说的又是错误的,因为用户名和密码甚至主机将来可能会改变,而你不想仅仅因为这一点而改变代码库。这就是环境变量提供帮助的原因。使用php getenv方法从heroku实例中获取字符串。我不知道变量的确切名称,但您可以从文档中获取,并最终在初始化mongodb驱动程序时传递该字符串。
编辑
我注意到你在问题中提到了MONGODB_URI,所以代码应该是
$mongoHost = getenv('MONGODB_URI');
$client = new MongoDB\Client($mongoHost);https://stackoverflow.com/questions/42933648
复制相似问题