• R/O
  • SSH
  • HTTPS

okuyama: 提交


Commit MetaInfo

修訂815 (tree)
時間2011-10-21 01:41:18
作者okuyamaoo

Log Message

(empty log message)

Change Summary

差異

--- trunk/etc_client/OkuyamaClient.class.php (revision 814)
+++ trunk/etc_client/OkuyamaClient.class.php (revision 815)
@@ -55,7 +55,9 @@
5555
5656 private $okuyamaVersionNo = 0.00;
5757
58+ private $getMultiEndOfDataStr = "END";
5859
60+
5961 /**
6062 * MasterNodeの接続情報を設定する.<br>
6163 * 本メソッドでセットし、autoConnect()メソッドを<br>
@@ -372,7 +374,7 @@
372374 if ($serverRet[0] === "37") {
373375 if ($serverRet[1] === "true") {
374376 // TransactionCode取得
375- $ret = true;
377+ $ret = true;
376378 $this->transactionCode = $serverRet[2];
377379 } else {
378380
@@ -788,7 +790,25 @@
788790 }
789791
790792
793+ /**
794+ * マスタサーバへデータを送信する.<br>
795+ * PHPのオブジェクトデータの保存を行う.<br>
796+ * 実装としてPHPのserialize関数を利用しているため、serialize関数で変換できないObjectは扱えない.<br>
797+ * Tag有り.<br>
798+ * 有効期限が秒単位で設定可能
799+ *
800+ * @param keyStr
801+ * @param objectValue
802+ * @param tagStrs
803+ * @param expireTime 有効期限(秒/単位)
804+ * @return boolean
805+ * @throws Exception
806+ */
807+ public function setObjectValue($keyStr, $objectValue, $tagStrs = null, $expireTime = null) {
808+ return $this->setValue($keyStr, serialize($objectValue), $tagStrs, $expireTime);
809+ }
791810
811+
792812 /**
793813 * MasterNodeへデータを登録要求する.<br>
794814 * 登録と同時にValueの検索Indexを作成する<br>
@@ -956,7 +976,7 @@
956976 * @return boolean
957977 * @throws Exception
958978 */
959- public function setNewValue($keyStr, $value, $tagStrs = null, $expireTime) {
979+ public function setNewValue($keyStr, $value, $tagStrs = null, $expireTime = null) {
960980 $ret = false;
961981 $serverRetStr = null;
962982 $serverRet = null;
@@ -1556,7 +1576,146 @@
15561576
15571577 /**
15581578 * マスタサーバからKeyでデータを取得する.<br>
1579+ * setObjectValueで保存したObjectを取得する.<br>
1580+ * 実装としてはPHPのunserialize関数を利用しているため、unserialize関数で変換できない値は扱えない
1581+ *
1582+ * @param keyStr
1583+ * @param encoding
1584+ * @return Object[] 要素1(データ有無(String)):"true" or "false" or "error",要素2(データ):Object型の値はもしくは"false"の場合はnull(データ有無がerrorの場合のみエラーメッセージ文字列(String型固定))
1585+ * @throws Exception
1586+ */
1587+ public function getObjectValue($keyStr) {
1588+
1589+ $ret = array();
1590+ $strRet = $this->getValue($keyStr);
1591+ if ($strRet[0] === "true") {
1592+ $ret[0] = "true";
1593+ $ret[1] = unserialize($strRet[1]);
1594+ } else {
1595+ $ret[0] = $strRet[0];
1596+ $ret[1] = $strRet[1];
1597+ }
1598+ return $ret;
1599+ }
1600+
1601+
1602+ /**
1603+ * マスタサーバからKeyを複数個指定することで一度に複数個のKeyとValueをを取得する.<br>
1604+ * 取得されたKeyとValueがarrayにKeyとValueの組になって格納され返される<br>
1605+ * 存在しないKeyを指定した場合は返却される連想配列には含まれない<br>
1606+ * Key値にブランクを指定した場合はKeyを指定していないものとみなされる<br>
1607+ *
15591608 * 文字列エンコーディング指定あり.<br>
1609+ *
1610+ * @param keyStrList Key値配列<br>1つだけのKeyを指定することは出来ない
1611+ * @param encoding エンコーディング指定
1612+ * @return array 取得データの連想配列 取得キーに同一のKey値を複数指定した場合は束ねられる arrayのキー値は指定されたKeyとなりValueは取得した値となる<br>全てのKeyに紐付くValueが存在しなかった場合は、nullが返る
1613+ * @throws Exception
1614+ */
1615+ public function getMultiValue($keyStrList, $encoding="UTF-8") {
1616+ $ret = array();
1617+ $serverRetStr = null;
1618+ $serverRet = null;
1619+
1620+ $serverRequestBuf = null;
1621+
1622+ try {
1623+ if ($this->socket == null) throw new OkuyamaClientException("No ServerConnect!!");
1624+
1625+ // エラーチェック
1626+ // Keyに対する無指定チェック
1627+ if ($keyStrList == null || count($keyStrList) < 2) {
1628+ throw new OkuyamaClientException("The blank is not admitted on a key");
1629+ }
1630+
1631+ $sendKeyList = array();
1632+
1633+ // 文字列バッファ初期化
1634+ $serverRequestBuf = "";
1635+
1636+ // 処理番号連結
1637+ $serverRequestBuf = $serverRequestBuf . "22";
1638+ // セパレータ連結
1639+ $serverRequestBuf = $serverRequestBuf . $this->sepStr;
1640+
1641+ // Key連結(Keyはデータ送信時には必ず文字列が必要)
1642+ $keysSep = "";
1643+ for ($i = 0; $i < count($keyStrList); $i++) {
1644+ if ($keyStrList[$i] != null && trim($keyStrList[$i]) !== "") {
1645+ $serverRequestBuf = $serverRequestBuf . $keysSep;
1646+ $serverRequestBuf = $serverRequestBuf . $this->dataEncoding($keyStrList[$i]);
1647+ $sendKeyList[] = $keyStrList[$i];
1648+ $keysSep = $this->sepStr;
1649+ }
1650+ }
1651+
1652+ if ($sendKeyList == null || count($sendKeyList) < 2) {
1653+ throw new OkuyamaClientException("The blank is not admitted on a key");
1654+ }
1655+
1656+ // サーバ送信
1657+ @fputs($this->socket, $serverRequestBuf . "\n");
1658+
1659+
1660+ $readIdx = 0;
1661+ while (true) {
1662+ $serverRetStr = @fgets($this->socket);
1663+ if ($serverRetStr === FALSE) break;
1664+
1665+ $serverRetStr = str_replace("\r", "", $serverRetStr);
1666+ $serverRetStr = str_replace("\n", "", $serverRetStr);
1667+ if ($serverRetStr === $this->getMultiEndOfDataStr) break;
1668+
1669+ $serverRet = explode($this->sepStr, $serverRetStr);
1670+
1671+ // 処理の妥当性確認
1672+ if ($serverRet[0] === "22") {
1673+ if ($serverRet[1] === "true") {
1674+
1675+ // データ有り
1676+ $oneDataKey = null;
1677+ $oneDataValue = null;
1678+
1679+ $oneDataKey = $sendKeyList[$readIdx];
1680+ // Valueがブランク文字か調べる
1681+ if ($serverRet[2] === $this->blankStr) {
1682+ $oneDataValue = "";
1683+ } else {
1684+
1685+ // Value文字列をBase64でデコード
1686+ $oneDataValue = $this->dataDecoding($serverRet[2], $encoding);
1687+ }
1688+
1689+ $ret[$oneDataKey] = $oneDataValue;
1690+ }
1691+ } else {
1692+
1693+ // 妥当性違反
1694+ throw new OkuyamaClientException("Execute Violation of validity");
1695+ }
1696+ $readIdx++;
1697+ }
1698+
1699+ if (count($ret) < 1) $ret = null;
1700+
1701+ } catch (OkuyamaClientException $oe) {
1702+ throw $oe;
1703+ } catch (Exception $e) {
1704+ if ($this->masterNodesList != null && count($this->masterNodesList) > 1) {
1705+ if($this->autoConnect()) {
1706+ $ret = $this->getMultiValue($keyStrList, $encoding);
1707+ }
1708+ } else {
1709+ throw $e;
1710+ }
1711+ }
1712+ return $ret;
1713+ }
1714+
1715+
1716+ /**
1717+ * マスタサーバからKeyでデータを取得する.<br>
1718+ * 文字列エンコーディング指定あり.<br>
15601719 * Valueのバージョン値を合わせて返す.<br>
15611720 * memcachedのgetsに相当する.<br>
15621721 *
@@ -1761,6 +1920,33 @@
17611920
17621921
17631922 /**
1923+ * マスタサーバからKeyでObjectを取得する.<br>
1924+ * setObjectDataで登録したデータを取り出す.<br>
1925+ * 取得と同時に値の有効期限を取得時から最初に設定した時間分延長更新<br>
1926+ * 有効期限を設定していない場合は更新されない.<br>
1927+ * Sessionキャッシュなどでアクセスした時間から所定時間有効などの場合にこちらのメソッドで<br>
1928+ * 値を取得していれば自動的に有効期限が更新される<br>
1929+ *
1930+ * @param keyStr
1931+ * @param encoding
1932+ * @return Object[] 要素1(データ有無(String)):"true" or "false" or "error",要素2(データ):Object型の値はもしくは"false"の場合はnull(データ有無がerrorの場合のみエラーメッセージ文字列(String型固定))
1933+ * @throws Exception
1934+ */
1935+ public function getObjectValueAndUpdateExpireTime($keyStr) {
1936+ $ret = array();
1937+ $strRet = $this->getValueAndUpdateExpireTime($keyStr);
1938+ if ($strRet[0] === "true") {
1939+ $ret[0] = "true";
1940+ $ret[1] = unserialize($strRet[1]);
1941+ } else {
1942+ $ret[0] = $strRet[0];
1943+ $ret[1] = $strRet[1];
1944+ }
1945+ return $ret;
1946+ }
1947+
1948+
1949+ /**
17641950 * マスタサーバからKeyでデータを取得する.<br>
17651951 * 取得データに対してJavaScriptを実行する.<br>
17661952 * 文字列エンコーディング指定あり.<br>
@@ -2445,6 +2631,122 @@
24452631
24462632
24472633 /**
2634+ * 全文検索用のIndexを削除する。
2635+ * Prefixあり<br>
2636+ * 検索Index長さ指定あり<br>
2637+ *
2638+ *
2639+ * @param keyStr Key値
2640+ * @param indexPrefix 作成時に設定したIndexのPrefix値
2641+ * @param indexLength 作成時に指定した作成Indexの長さ指定
2642+ * @return boolean 削除成否
2643+ */
2644+ public function removeSearchIndex($keyStr, $indexPrefix = null, $indexLength = 3) {
2645+ $ret = false;
2646+ $serverRetStr = null;
2647+ $serverRet = null;
2648+ $serverRequestBuf = null;
2649+ try {
2650+ // Byte Lenghtチェック
2651+ if ($this->checkStrByteLength($keyStr) > $this->maxKeySize) throw new OkuyamaClientException("Save Key Max Size " . $this->maxKeySize . " Byte");
2652+ if ($tagStr != null) {
2653+ if ($this->checkStrByteLength($tagStr) > $this->maxKeySize) throw new OkuyamaClientException("Tag Max Size " . $this->maxKeySize . " Byte");
2654+ }
2655+
2656+ if ($this->socket == null) throw new OkuyamaClientException("No ServerConnect!!");
2657+
2658+ // エラーチェック
2659+ // Keyに対する無指定チェック
2660+ if ($keyStr == null || $keyStr === "") {
2661+ throw new OkuyamaClientException("The blank is not admitted on a key");
2662+ }
2663+
2664+
2665+
2666+ // 文字列バッファ初期化
2667+ $serverRequestBuf = "";
2668+
2669+
2670+ // 処理番号連結
2671+ $serverRequestBuf = "44";
2672+
2673+ // セパレータ連結
2674+ $serverRequestBuf = $serverRequestBuf . $this->sepStr;
2675+ // Key連結(Keyはデータ送信時には必ず文字列が必要)
2676+ $serverRequestBuf = $serverRequestBuf. $this->dataEncoding($keyStr);
2677+
2678+ // セパレータ連結
2679+ $serverRequestBuf = $serverRequestBuf . $this->sepStr;
2680+ // TransactionCode連結
2681+ $serverRequestBuf = $serverRequestBuf . $this->transactionCode;
2682+
2683+ // セパレータ連結
2684+ $serverRequestBuf = $serverRequestBuf . $this->sepStr;
2685+ // プレフィックスを有無に合わせて連結
2686+ if ($indexPrefix == null || $indexPrefix === "") {
2687+
2688+ // ブランク規定文字列を連結
2689+ $serverRequestBuf = $serverRequestBuf . $this->blankStr;
2690+ } else {
2691+
2692+ // Indexプレフィックス連結
2693+ $serverRequestBuf = $serverRequestBuf . $this->dataEncoding($indexPrefix);
2694+ }
2695+
2696+ // セパレータ連結
2697+ $serverRequestBuf = $serverRequestBuf . $this->sepStr;
2698+ // createIndexLen連結
2699+ $serverRequestBuf = $serverRequestBuf . $indexLength;
2700+
2701+
2702+ // サーバ送信
2703+ @fputs($this->socket, $serverRequestBuf . "\n");
2704+
2705+ $serverRetStr = @fgets($this->socket);
2706+
2707+ $serverRetStr = str_replace("\r", "", $serverRetStr);
2708+ $serverRetStr = str_replace("\n", "", $serverRetStr);
2709+ $serverRet = explode($this->sepStr, $serverRetStr);
2710+
2711+ // 処理の妥当性確認
2712+ if ($serverRet[0] === "44") {
2713+ if ($serverRet[1] === "true") {
2714+
2715+ // 処理成功
2716+ $ret = true;
2717+ } else{
2718+
2719+ // 処理失敗(データなし)
2720+ $ret = false;
2721+ }
2722+ } else {
2723+ if ($this->masterNodesList != null && count($this->masterNodesList) > 1) {
2724+ if($this->autoConnect()) {
2725+ $ret = $this->removeSearchIndex($keyStr, $indexPrefix, $indexLength);
2726+ }
2727+ } else {
2728+
2729+ // 妥当性違反
2730+ throw new OkuyamaClientException("Execute Violation of validity");
2731+ }
2732+ }
2733+ } catch (OkuyamaClientException $oe) {
2734+ throw $oe;
2735+ } catch (Exception $e) {
2736+ if ($this->masterNodesList != null && count($this->masterNodesList) > 1) {
2737+ if($this->autoConnect()) {
2738+ $ret = $this->removeSearchIndex($keyStr, $indexPrefix, $indexLength);
2739+ }
2740+ } else {
2741+
2742+ throw $e;
2743+ }
2744+ }
2745+ return $ret;
2746+ }
2747+
2748+
2749+ /**
24482750 * マスタサーバからKeyでデータを取得する(バイナリ).<br>
24492751 *
24502752 * @param keyStr
--- trunk/etc_client/PhpAutoTest.bat (revision 814)
+++ trunk/etc_client/PhpAutoTest.bat (revision 815)
@@ -1,11 +1,11 @@
11 rem キー値を自動でインクリメントして10個登録
2-php PhpTestSock.php 1 127.0.0.1 8888 10
2+php PhpTestSock.php 1 127.0.0.1 8888 100
33 rem キー値をkey_aでバリュー値value_bを登録
44 php PhpTestSock.php 1.1 127.0.0.1 8888 key_a value_b
55 rem キー値をkey_aでバリュー値value_cを登録-有効期限テスト
66 php PhpTestSock.php 1.2 127.0.0.1 8888 key_c value_c 3
77 rem キー値を自動でインクリメントして10個valueを取得
8-php PhpTestSock.php 2 127.0.0.1 8888 10
8+php PhpTestSock.php 2 127.0.0.1 8888 100
99 rem キー値をkey_aでvalueを取得
1010 php PhpTestSock.php 2.1 127.0.0.1 8888 key_a
1111 rem キー値をkey_aで取得したvalueに対してJavaScriptを実行
@@ -14,8 +14,12 @@
1414 php PhpTestSock.php 2.4 127.0.0.1 8888 key_a "var dataValue; var dataKey; var retValue = dataValue.replace('b', 'dummy'); if(dataKey == 'key_a') {var execRet = '2'} else {var execRet = '1'}"
1515 rem キー値をkey_aでバリュー値value_dを登録-有効期限設定を行って有効期限到達前に更新での取得
1616 php PhpTestSock.php 2.5 127.0.0.1 8888 key_d value_d 3
17+rem キー値を複数指定してkeyとvalueの集合を取得
18+php PhpTestSock.php 2.6 127.0.0.1 8888
19+rem キー値をkey_objでバリュー値Objectを登録-有効期限設定を行って有効期限到達前に更新での取得
20+php PhpTestSock.php 2.7 127.0.0.1 8888 key_obj 3
1721 rem Tag値を自動で変えて、KeyとValueを10回登録
18-php PhpTestSock.php 3 127.0.0.1 8888 10
22+php PhpTestSock.php 3 127.0.0.1 8888 100
1923 rem Tag値をtag1を指定して、tag1に属するKey値を取得(Key値存在指定有り(true))
2024 php PhpTestSock.php 4 127.0.0.1 8888 tag1 true
2125 rem Tag値をtag1を指定して、tag1に属するKey値を取得(Key値存在指定有り(false))
@@ -31,23 +35,29 @@
3135 rem 値の新規登録をおこなう-有効期限あり
3236 php PhpTestSock.php 10.1 127.0.0.1 8888 newkeyT newvalueT 3
3337 rem cas
34-php PhpTestSock.php 12 127.0.0.1 8888 newkey value_cas 0
38+php PhpTestSock.php 12 127.0.0.1 8888 newkey valuecas 0
3539 rem cas Miss
36-php PhpTestSock.php 12 127.0.0.1 8888 newkey value_cas 1
40+php PhpTestSock.php 12 127.0.0.1 8888 newkey valuecas 1
3741 rem cas Tag
38-php PhpTestSock.php 13 127.0.0.1 8888 newkey value_cas tag1 2
42+php PhpTestSock.php 13 127.0.0.1 8888 newkey valuecas tag1 2
3943 rem gets
4044 php PhpTestSock.php 11 127.0.0.1 8888 newkey
4145 rem incr
42-php PhpTestSock.php 12 127.0.0.1 8888 newkey 1
46+php PhpTestSock.php 20 127.0.0.1 8888 newkey 1
4347 rem incr
44-php PhpTestSock.php 12 127.0.0.1 8888 newkey 109
48+php PhpTestSock.php 20 127.0.0.1 8888 newkey 109
4549 rem decr
46-php PhpTestSock.php 13 127.0.0.1 8888 newkey 1
50+php PhpTestSock.php 21 127.0.0.1 8888 newkey 1
4751 rem decr
48-php PhpTestSock.php 13 127.0.0.1 8888 newkey 109
52+php PhpTestSock.php 21 127.0.0.1 8888 newkey 109
4953 rem removeTagFromkey
5054 php PhpTestSock.php 22 127.0.0.1 8888 datasavekey_46 tag1
55+rem setObjectValue
56+php PhpTestSock.php 23 127.0.0.1 8888 objectKey1
57+rem getObjectValue
58+php PhpTestSock.php 24 127.0.0.1 8888 objectKey1
59+rem getObjectValue
60+php PhpTestSock.php 24 127.0.0.1 8888 objectKey2
5161 rem setValueAndCreateIndex
5262 php PhpTestSock.php 42 127.0.0.1 8888 1000
5363 rem searchValue
@@ -56,3 +66,5 @@
5666 php PhpTestSock.php 42.1 127.0.0.1 8888 1000 Prefix1
5767 rem searchValue
5868 php PhpTestSock.php 43.1 127.0.0.1 8888 "7" "716" 2 "Prefix1"
69+rem removeSearchIndex
70+php PhpTestSock.php 44 127.0.0.1 8888 "datavaluestr_716" 1 ""
--- trunk/etc_client/PhpTestSock.php (revision 814)
+++ trunk/etc_client/PhpTestSock.php (revision 815)
@@ -10,8 +10,7 @@
1010 // 4.実行回数:0〜n(実行モード1.1及び2.1及び2.3及び3及び8時は登録、取得、削除したいKey or Tag値)
1111 // 5.登録データ:(実行モード1.1及び2.3時のみ有効 1.1時は登録したいValue値、2.3時は実行したいJavaScript)
1212
13- require_once("OkuyamaClient.class.php");
14-
13+ require_once("OkuyamaClient.class.php");
1514 if ($argc > 3) {
1615
1716 // クライアント作成
@@ -116,6 +115,17 @@
116115 $searchWordList[0] = $argv[4];
117116 $searchWordList[1] = $argv[5];
118117 var_dump($client->searchValue($searchWordList, $argv[6]));
118+ } else if ($argv[1] === "44") {
119+
120+
121+ // データを検索Indexを削除
122+ var_dump($client->removeSearchIndex("datasavekey_716"));
123+
124+ $searchWordList = array();
125+ $searchWordList[0] = $argv[4];
126+
127+ var_dump($client->searchValue($searchWordList, $argv[5], $argv[6]));
128+
119129 } else if ($argv[1] === "2") {
120130
121131 // データを引数の回数分取得
@@ -185,6 +195,89 @@
185195 }
186196 }
187197
198+ } else if ($argv[1] === "2.6") {
199+ $client->setValue("key_multi_1", "val_multi_1");
200+ $client->setValue("key_multi_2", "val_multi_2");
201+ $client->setValue("key_multi_3", "val_multi_3");
202+ $client->setValue("key_multi_4", "val_multi_4");
203+ $client->setValue("key_multi_5", "val_multi_5");
204+
205+ $getMKeyList1 = array();
206+ $getMKeyList1[] = "key_multi_1";
207+ $getMKeyList1[] = "key_multi_2";
208+ $getMKeyList1[] = "key_multi_3";
209+ $getMKeyList1[] = "key_multi_4";
210+ $getMKeyList1[] = "key_multi_5";
211+ var_dump($client->getMultiValue($getMKeyList1));
212+
213+ $getMKeyList2 = array();
214+ $getMKeyList2[] = "key_multi_4";
215+ $getMKeyList2[] = "key_multi_3";
216+ var_dump($client->getMultiValue($getMKeyList2));
217+
218+
219+ $getMKeyList3 = array();
220+ $getMKeyList3[] = "key_multi_3";
221+ $getMKeyList3[] = "key_multi_aaa";
222+ $getMKeyList3[] = "key_multi_bbb";
223+ $getMKeyList3[] = "key_multi_ccc";
224+ var_dump($client->getMultiValue($getMKeyList3));
225+
226+ $getMKeyList4 = array();
227+ $getMKeyList4[] = "key_multi_xxx";
228+ $getMKeyList4[] = "key_multi_aaa";
229+ $getMKeyList4[] = "key_multi_bbb";
230+ $getMKeyList4[] = "key_multi_ccc";
231+ var_dump($client->getMultiValue($getMKeyList4));
232+
233+
234+ $getMKeyList5 = array();
235+ $getMKeyList5[] = "key_multi_3";
236+ $getMKeyList5[] = "key_multi_aaa";
237+ $getMKeyList5[] = "key_multi_bbb";
238+ $getMKeyList5[] = "key_multi_ccc";
239+ $getMKeyList5[] = "key_multi_1";
240+ var_dump($client->getMultiValue($getMKeyList5));
241+
242+
243+ $getMKeyList6 = array();
244+ $getMKeyList6[] = "key_multi_1";
245+ $getMKeyList6[] = "";
246+ $getMKeyList6[] = "";
247+ $getMKeyList6[] = "";
248+ $getMKeyList6[] = "key_multi_";
249+ var_dump($client->getMultiValue($getMKeyList6));
250+ } else if ($argv[1] === "2.7") {
251+ // 指定のKey値でObjectを取得
252+ // 有効期限を自動的に更新する
253+ // データを有効期限付きで登録
254+ $setObj4ExTime = array();
255+ $setObj4ExTime[] = "aaxx";
256+ $setObj4ExTime[] = "bbyy";
257+ $setObj4ExTime[] = array();
258+
259+ if(!$client->setObjectValue($argv[4], $setObj4ExTime, null, $argv[5])) {
260+
261+ print_r("Regist Error");
262+ } else {
263+
264+ sleep(intval($argv[5]) - 1);
265+ $ret = $client->getObjectValueAndUpdateExpireTime($argv[4]);
266+ sleep(1);
267+ $ret = $client->getObjectValue($argv[4]);
268+ if ($ret[0] === "false") {
269+ print_r("ExpireTimeUpdateGet Error");
270+ print_r("\r\n");
271+ print_r($ret[1]);
272+ print_r("\r\n");
273+ } else if ($ret[0] === "true") {
274+ print_r("ExpireTimeUpdateGet OK");
275+ print_r("\r\n");
276+ var_dump($ret[1]);
277+ print_r("\r\n");
278+ }
279+ }
280+
188281 } else if ($argv[1] === "3") {
189282
190283 // データを引数の回数分登録(Tagを登録)
@@ -362,6 +455,18 @@
362455
363456 // Tag削除
364457 var_dump($client->removeTagFromKey($argv[4], $argv[5]));
458+ } else if ($argv[1] === "23") {
459+ // Object登録
460+ $setObj = array();
461+ $setObj[0] = "";
462+ $setObj[1] = "aaa";
463+ $setObj[2] = "bbb";
464+ $setObj[3] = array();
465+
466+ var_dump($client->setObjectValue($argv[4], $setObj));
467+ } else if ($argv[1] === "24") {
468+ // Object取得
469+ var_dump($client->getObjectValue($argv[4]));
365470 }
366471
367472
Show on old repository browser