2016-04-27 28 views
0

我想用php连接到documentDB Azure,但是我没有得到它的工作。现在我正在使用code given here,但即使这样也行不通。我可以连接到documentDB帐户,但问题是我无法在我的帐户中选择数据库。这是selectDB功能,我使用如何使用php选择documentDB数据库azure?

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); 
} 

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

+0

listDatabases请求是否返回200? JSON的外观如何?它应该看起来像这样:https://msdn.microsoft.com/en-us/library/azure/mt489065.aspx –

+0

当我在本地机器上运行此代码时,它连接到数据库,但是当我推送代码到本地的git仓库在azure上不起作用。你知道为什么吗? – Rohit

回答

0

关于你的问题,你可以在函数phpdocumentdb.php中加var_dump(curl_error($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/

+0

当我在本地机器上运行此代码时,它将连接到数据库,但是当我将这些代码推送到本地的天蓝色git存储库时,它不起作用。你知道为什么吗? – Rohit

+0

默认情况下,Azure PHP运行时没有SSL证书,您应该创建并配置一个,请参阅https://blogs.msdn.microsoft.com/azureossds/2015/06/12/verify-peer-certificate-from -php卷曲换Azure的应用程序/。 –

+0

否则,你可以简单地添加句子curl_setopt($ curl,CURLOPT_SSL_VERIFYPEER,false);在phpdocumentdb.php中的请求函数中绕过SSL验证。正如我在我的回答中提到的。 –