Google Cloud Client Library for PHP를 사용하여 Datastore 작업
이번에는 Google Compute Engine(GCE)에서 인스턴스를 만들고 PHP에서 Datastore를 조작할 때까지의 흐름을 간략하게 정리했습니다.
동작 확인은 Google Cloud Client Library for PHP 샘플 프로그램을 사용합니다.
(샘플 프로그램은 htps : // 기주 b. 코 m / 오 g g C d d p t t rm / g g c d dphp # 오 g g c d d 참조)
전제 조건
Google Cloud Platform(GCP)을 사용할 수 있는 상태에서 하나 이상의 프로젝트를 생성함
환경 구축
OS: Debian8
언어: PHP5.6
클라이언트 라이브러리: Google Cloud PHP v0.11.1
Compute Engine > VMインスタンス > インスタンスを作成
에서 새 인스턴스를 만듭니다.샘플 코드를 움직일 뿐이므로 각 항목은 기본 모두 기본적으로 좋지만, "ID 및 API에 액세스"는 "각 API에 대한 액세스 권한 설정"을 체크하여 Cloud Datastore를 활성화하십시오. .
Datastore를 유효하게 하지 않으면 프로그램 실행시에 다음과 같은 에러가 나와 처리가 실패하므로 주의해 주세요.
PHP Fatal error: Uncaught exception 'Google\Cloud\Exception\ServiceException' with message '{
"error": {
"code": 403,
"message": "Request had insufficient authentication scopes.",
"status": "PERMISSION_DENIED"
}
}
클라이언트 라이브러리 설치
작성한 인스턴스에 SSH 연결하고 다음을 수행하십시오.
PHP 설치
sudo apt-get update
sudo apt-get install -y php5
php -v
PHP 5.6.26-0+deb8u1 (cli) (built: Sep 21 2016 12:37:50)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
comporser 설치
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
PHP 클라이언트 라이브러리 설치
composer require google/cloud
샘플 프로그램을 사용하여 동작 확인
여기에 있는 샘플 프로그램을 움직여 보겠습니다.
test.php
require 'vendor/autoload.php';
use Google\Cloud\Datastore\DatastoreClient;
$datastore = new DatastoreClient([
'projectId' => 'my_project' // ここは自分のプロジェクトIDに変更
]);
// Create an entity
$bob = $datastore->entity('Person');
$bob['firstName'] = 'Bob';
$bob['email'] = '[email protected]';
$datastore->insert($bob);
// Fetch an entity
$key = $datastore->key('Person', 'Bob');
$bob = $datastore->lookup($key);
// Update an entity
$bob['email'] = '[email protected]';
$datastore->update($bob);
프로그램이 실행되면 타입은 Person로 프로퍼티는 email와 firstName의 2개를 가지는 엔티티가 작성되고 나서 email의 값을 보 b @ 에어 mp ぇ. 이 m 로부터 보보 bv2 @ 에어 mp ぇ. 이 m 로 변경됩니다.
그럼 실행해 보겠습니다.
php test.php
실행 결과입니다.
PHP Catchable fatal error: Argument 1 passed to Google\Cloud\Datastore\DatastoreClient::update() must be an instance of Google\Cloud\Datastore\Entity, array given ・・・・
샘플 프로그램을 실행하면 PHP 오류가 발생하여 엔티티 업데이트에 실패했습니다.
에러 메세지에는 update() 의 인수는 「instance of Google\Cloud\Datastore\Entity」가 아니면 안 되는데, 배열이 건네받고 있다고 쓰여져 있습니다.
엔티티를 살펴보면 엔티티 작성이 성공한 것 같습니다.
엔티티 update 실패의 원인은 다음과 같습니다.
// Fetch an entity
$key = $datastore->key('Person', 'Bob');
$bob = $datastore->lookup($key);
$datastore->lookup($key)
의 결과가 NULL이 되기 때문이었습니다.$key의 값이 이상하기 때문에 제대로 결과를 얻을 수 없는 것 같습니다.
$datastore->key('Person', 'Bob')
의 부분을 조사해 보면, 메소드 key의 제 1 인수는 kind (종류), 제 2 인수는 ID or name 이 되어 있었습니다.자세한 내용은 여기를 참조하십시오.
ぇtp //오오gぇcぉdpぁtふぉrm. 기주 b. 이오/오오 gぇ-cぉd dphp/#/도cs/v0.11. 메메 d = 케 y
방금 움직인 프로그램에서는 제 2 인수는 'Bob'이므로 ID가 아니라 name을 지정하고 있었습니다.
그러나 방금 만든 엔티티를 잘 살펴보면 name이 아닌 ID(ID=5685265389584384)로 작성되었습니다.
$datastore->key('Person', 'Bob')
의 부분을 $datastore->key('Person', '5685265389584384')
라고 하면 에러는 없어집니다만, 엔티티의 작성 부분을 다음과 같이 수정하면 $datastore->key('Person', 'Bob')
그대로 잘 동작할 것 같습니다.// Create an entity
// $bob = $datastore->entity('Person'); // ここはコメントアウト
$key = $datastore->key('Person', 'Bob'); // kind=Person、name=Bob
$bob = $datastore->entity($key);
$bob['firstName'] = 'Bob';
$bob['email'] = '[email protected]';
$datastore->insert($bob);
실행 결과입니다.
이름 = Bob으로 엔터티가 만들어졌으며 이메일 값을
[email protected]
로 변경하는 데 성공했습니다.최종적으로 실행한 프로그램은 다음과 같습니다.
test.php
<?php
require 'vendor/autoload.php';
use Google\Cloud\Datastore\DatastoreClient;
$datastore = new DatastoreClient([
'projectId' => 'my_project' // ここは自分のプロジェクトIDに変更
]);
// Create an entity
$key = $datastore->key('Person', 'Bob');
$bob = $datastore->entity($key);
$bob['firstName'] = 'Bob';
$bob['email'] = '[email protected]';
$datastore->insert($bob);
// Fetch an entity
$key = $datastore->key('Person', 'Bob');
$bob = $datastore->lookup($key);
// Update an entity
$bob['email'] = '[email protected]';
$datastore->update($bob);
결론
샘플 프로그램을 움직인 정도이지만 GCE에서 PHP 클라이언트를 사용하여 Datastoe 작업을 쉽게 할 수있었습니다.
이번에는 엔티티를 만들고 업데이트했지만 다음에 GQL의 이해를 깊게 해 나가고 싶습니다.
Reference
이 문제에 관하여(Google Cloud Client Library for PHP를 사용하여 Datastore 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fuoyaizu-yj/items/c775413b5a96fc14a6f6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)