Top > xtra > php_manual > xmlrpc > xmlrpc_set_type

xmlrpc_set_type

PHP 文字列型のある値に対して、それが xmlrpc の特定の型に変換されるように指定する。

説明

bool xmlrpc_set_type(string &$value, string $type)

パラメータ

value
型を設定する値。この関数が成功した場合、文字列型から xmlrpc の 型情報を持ったクラスインスタンスに差し替えられます。
type
'base64' あるいは 'datetime'

返り値

成功時は TRUE、失敗時は FALSE が返されます。

xmlrpc の datetime 型を使う場合、DateTime クラスとは全く異なる xmlrpc 専用のクラスを使うことになります。このクラスのオブジェクト(インスタンス)は、次の例のように生成できます。xmlrpc_set_type が datetime 型として解釈できる文字列の形式は iso8601 の形式です。

<?php
$a=date('c');
if(xmlrpc_set_type($a,'datetime')){
  var_dump($a);
  var_dump(xmlrpc_encode($a));
}
?>

実行結果はこのようになります。xmlrpc_set_type で処理した変数はオブジェクトになっていることに注意してください。PHP 5.2.7 以降 datetime は Timezone つき、つまり timezone-aware で送信されるようになりました。それ以前のものでは Timezone がつかない、つまり timezone-naive であることに注意してください。

object(stdClass)#1 (3) {
  ["scalar"]=>
  string(25) "2009-01-13T12:31:17+09:00"
  ["xmlrpc_type"]=>
  string(8) "datetime"
  ["timestamp"]=>
  int(1231817477)
}
string(151) "<params> 
<param> 
 <value> 
  <dateTime.iso8601>2009-01-13T12:31:17+09:00</dateTime.iso8601> 
 </value> 
</param> 
</params> 
"

xmlrpc 通信の結果受け取った datetime 型の変数も同じメンバー変数を持っています。timestamp メンバー変数は現在の PHP 5.2.8 でも正しい値が得られないことが分かっていますので、scalar メンバー変数を strtotime で解釈させて値を得るのが良いでしょう。

base64 型に変換する場合の例は次のようなものです。 例中の $a は実際にはバイナリシーケンスで、文字列とは限りません。

<?php
$a='test';
if(xmlrpc_set_type($a,'base64')){
 var_dump(xmlrpc_encode($a));
}
?>

実行結果はこのようになります。

string(127) "<?xml version="1.0" encoding="utf-8"?>
<params>
<param>
 <value>
  <base64>dGVzdA==&#10;</base64>
 </value>
</param>
</params>
"

&#10; は「改行」です。MIME の Base64 の仕様では 76 文字で改行すること、 と仕様に記載されています。これに対応する改行です。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: (1796d)

© 2006-2008 Internet Revolution