我使用谷歌應用程序引擎對我的web應用程序,我需要使用的NoSQL數據庫,所以我最好的選擇是谷歌雲存儲如何使用php訪問Google Cloud數據存儲區?
既然不能找到一種方法,它與PHP我可以連接不會使用它。沒有提到official documentationphp。我想確保有沒有辦法通過php訪問它?
我使用谷歌應用程序引擎對我的web應用程序,我需要使用的NoSQL數據庫,所以我最好的選擇是谷歌雲存儲如何使用php訪問Google Cloud數據存儲區?
既然不能找到一種方法,它與PHP我可以連接不會使用它。沒有提到official documentationphp。我想確保有沒有辦法通過php訪問它?
從PHP訪問Google Cloud Datastore沒有文檔記錄,但您應該可以像使用其他Google API一樣使用Google APIs Client Library for PHP。
首先,安裝使用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。
[最近發佈的GAE PHP運行時是否可以訪問本地GAE數據存儲?](http://stackoverflow.com/questions/16601074/can-the-recently-released-gae-php-runtime-access- the-native-gae-datastore) –
是的,你是對的,這是重複的,但這是因爲在其他帖子上沒有完整的答案。你說:「有支持已經添加到最新的谷歌PHP API客戶端 - 看看類Google_DatastoreService,我會盡快做一個快速演示教程。」在8月15日,現在是11月25日,但仍然沒有教程:(這就是爲什麼人們總是問同樣的問題。我的遊戲項目停止了,因爲我不知道如何在GAE上使用PHP中的Datastore,請提供一個簡單的關於如何在數據存儲中存儲和檢索JSON樣式對象的教程 –