【问题标题】:How to select documentDB database azure using php?如何使用 php 选择 documentDB 数据库 azure?
【发布时间】:2016-04-27 19:51:10
【问题描述】:

我正在尝试使用 php 与 documentDB Azure 连接,但无法正常工作。现在我正在使用code given here,但即使这样也不起作用。我可以连接到 documentDB 帐户,但问题是我无法在我的帐户中选择数据库。这是我正在使用的 selectDB 函数

public function selectDB($db_name)
{
    $rid_db = false;
    $object = json_decode($this->listDatabases());
    $db_list = $object->Databases;
    foreach ($db_list as $value) 
    {
        if ($value->id === $db_name) 
        {
            $rid_db = $value->_rid;
        }
    }
    if (!$rid_db) 
    {
        $object = json_decode($this->createDatabase('{"id":"' . $db_name . '"}'));
        $rid_db = $object->_rid;
    }
    if ($rid_db) 
    {
        return new DocumentDBDatabase($this, $rid_db);
    } 
    else 
    {
        return false;
    }
}

我尝试调试它,发现listDatabases()函数不起作用(没有选择帐户中的数据库)这是listDatabase()函数:

public function listDatabases()
{
    $headers = $this->getAuthHeaders('GET', 'dbs', '');
    $headers[] = 'Content-Length:0';
    $options = array(
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_HTTPGET => true,
    );
    return $this->request("/dbs", $options);
}

有人可以帮我解决这个问题吗?

【问题讨论】:

  • listDatabases 请求是否返回 200?响应 JSON 是什么样的?它应该看起来像这样:msdn.microsoft.com/en-us/library/azure/mt489065.aspx
  • 当我在本地机器上运行此代码时,它正在连接到数据库,但是当我将此代码推送到 azure 上的本地 git 存储库时,它不起作用。你知道为什么吗?

标签: php azure azure-cosmosdb


【解决方案1】:

针对您的问题,您可以在phpdocumentdb.php 中的request 函数中添加var_dump(curl_error($curl));,以便解决 curl 问题。

如果您在本地或某些开发环境中进行开发,则可能会出现 SSL 证书问题。 curl错误可能会输出消息:SSL证书问题:无法获取本地颁发者证书

而对于开发,你可以在phpdocumentdb.phprequest函数中简单的添加一句curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);来绕过SSL验证。

如果您在 prod 环境中,您应该在 PHP 运行时创建 SSL 证书。更多信息请参考https://blogs.msdn.microsoft.com/azureossds/2015/06/12/verify-peer-certificate-from-php-curl-for-azure-apps/

【讨论】:

  • 当我在本地机器上运行此代码时,它正在连接到数据库,但是当我将此代码推送到 azure 上的本地 git 存储库时,它不起作用。你知道为什么吗?
  • 默认情况下,Azure PHP 运行时没有 SSL 证书,您需要创建和配置一个,请参考blogs.msdn.microsoft.com/azureossds/2015/06/12/…
  • 否则可以简单加句curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);在 phpdocumentdb.php 的请求函数中绕过 SSL 验证。正如我在回答中提到的那样。
  • 嗨,加里,curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);为我工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多