2013-10-07 61 views
6

我使用谷歌應用程序引擎對我的web應用程序,我需要使用的NoSQL數據庫,所以我最好的選擇是谷歌雲存儲如何使用php訪問Google Cloud數據存儲區?

既然不能找到一種方法,它與PHP我可以連接不會使用它。沒有提到official documentationphp。我想確保有沒有辦法通過php訪問它?

+0

[最近發佈的GAE PHP運行時是否可以訪問本地GAE數據存儲?](http://stackoverflow.com/questions/16601074/can-the-recently-released-gae-php-runtime-access- the-native-gae-datastore) –

+0

是的,你是對的,這是重複的,但這是因爲在其他帖子上沒有完整的答案。你說:「有支持已經添加到最新的谷歌PHP API客戶端 - 看看類Google_DatastoreService,我會盡快做一個快速演示教程。」在8月15日,現在是11月25日,但仍然沒有教程:(這就是爲什麼人們總是問同樣的問題。我的遊戲項目停止了,因爲我不知道如何在GAE上使用PHP中的Datastore,請提供一個簡單的關於如何在數據存儲中存儲和檢索JSON樣式對象的教程 –

回答

5

這個庫可以幫助人們找到這個線程

旨在使谷歌Datatore容易從PHP。

https://github.com/tomwalder/php-gds

+1

您可以解釋如何在沒有作曲者的情況下進行設置嗎 – Rookie

+0

該庫現在處於2.0測試版並且具有更好的文檔編輯器仍然是首選的安裝機制 – Tom

+0

此外,它現在通過隨庫提供的內置解析器提供本地GQL支持。我希望有人認爲它很有用!https://github.com/tomwalder/php-gds – Tom

1

首先,安裝使用Composer(依賴經理)谷歌官方雲存儲PHP API。您可以通過添加"google/cloud-datastore": "^1.0"您composer.json的「要求」部分運行composer update

你可以用命令來啓動本地數據存儲模擬器做到這一點:

gcloud beta emulators datastore start 

這裏有一個輔助類我寫的處理連接到數據存儲:

<?php 
// Datastore.php 
use Google\Cloud\Datastore\DatastoreClient; 

class Datastore { 
    private static $ds; 

    /** 
    * Creates or returns the Datastore instance 
    * 
    * @return void 
    */ 
    public static function getOrCreate() { 
     if (isset(Datastore::$ds)) return Datastore::$ds; 

     // gcloud beta emulators datastore start --data-dir=_datastore 
     if (Datastore::isDevEnv() == true) { 
      putenv('DATASTORE_EMULATOR_HOST=http://localhost:8081'); 
      // To run locally, you may still need to download a credentials file from console.cloud.google.com 
      //putenv('GOOGLE_APPLICATION_CREDENTIALS=' . __DIR__ . '/datastore_creds.json');    
     } 

     $datastore = new DatastoreClient([ 
      'projectId' => Core::getProjectId() 
      // 'keyFilePath' => 'datastore_creds.json' 
     ]); 

     Datastore::$ds = $datastore; 
     return Datastore::$ds; 
    } 

    /** 
    * Returns true if server running in development environment. 
    * 
    * @return boolean 
    */ 
    static function isDevEnv() { 
     if (isset(Core::$_isDevEnv)) return Core::$_isDevEnv; 
     Core::$_isDevEnv = (strpos(getenv('SERVER_SOFTWARE'), 'Development') === 0); 
     return Core::$_isDevEnv; 
    } 

    /** 
    * Formats fields and indexes for datastore. 
    * @param Datastore $ds 
    * @param Key $entityKey Datastore key. 
    * @param [] $fields 
    * @param [string] $indexes Keys to index. 
    * @return Entity 
    */ 
    static function entityWithIndexes(DatastoreClient $ds, $entityKey, $fields, $indexes = []) { 
     // Create exclude from indexes array. 
     $excludedIndexes = []; 
     foreach ($fields as $key => $value) { 
      if (in_array($key, $indexes) == false) { 
       $excludedIndexes[] = $key; 
      } 
     } 

     $entity = $ds->entity($entityKey, $fields, [ 
      'excludeFromIndexes' => $excludedIndexes 
     ]); 
     return $entity; 
    } 
} 

這裏是你將如何使用它來插入一個新的實體進入數據存儲

require 'vendor/autoload.php'; 
require 'Datastore.php';  
$ds = Datastore::getOrCreate(); 
$key = $ds->key('MyEntityType'); 
$data = [ 
     'name' => 'Foo!' 
]; 
$indexes = ['name']; 
$entity = Datastore::entityWithIndexes($ds, $key, $data, $indexes); 
$ds->insert($entity); 

如果遇到模擬器問題,請嘗試將代碼部署到App Engine並查看是否有相同的錯誤。當地的發展環境可能很脆弱。您也可以查看official PHP Datastore API docs here

相關問題