PHP Conference Japan 2024

xmlrpc_set_type

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_set_type設定 PHP 字串值的 xmlrpc 類型,base64 或 datetime

說明

xmlrpc_set_type(字串 &$value, 字串 $type): 布林值

設定 PHP 字串值的 xmlrpc 類型,base64 或 datetime。

警告

此函式為*實驗性*。此函式的行為、其名稱和周圍的文件可能會在未來的 PHP 版本中有所變更。使用此函式需自行承擔風險。

參數

value

要設定類型的值

type

'base64' 或 'datetime'

回傳值

成功時回傳 true,失敗時回傳 false。如果成功,value 會被轉換成物件。

錯誤/例外

對於 XMLRPC 不支援的類型,會發出 E_WARNING 錯誤。

範例

範例 #1 xmlrpc_set_type() 範例

<?php

$params
= date("Ymd\TH:i:s", time());
xmlrpc_set_type($params, 'datetime');
echo
xmlrpc_encode($params);

?>

上述範例的輸出會類似如下

<?xml version="1.0" encoding="utf-8"?>
<params>
<param>
 <value>
  <dateTime.iso8601>20090322T23:43:03</dateTime.iso8601>
 </value>
</param>
</params>

新增註解

使用者貢獻的註解 3 則註解

shem((at))etkDOTca [aka.Przemyslaw Szot]
20 年前
一旦您使用了 xmlrpc_set_type 函式,資料就會被編碼成 PHP 物件。在您的 XMLRPC 伺服器中,為了存取資料,您必須能夠存取物件的必要部分。

所以… 延伸上面的例子

<---------- 客戶端 ---------->
$string = "我的紀錄事件。";
$date = "20030115T12:22:37"; // 必須是這個格式
$binary = fread($fp, 128);
xmlrpc_set_type(&$date, "datetime");
xmlrpc_set_type(&$binary, "base64");
$xmlrpcReq = xmlrpc_encode_request("log.data", array($string, $date, $binary));

為了取得二進位檔案資料,您需要取得物件的純量部分

<---------- 伺服器端 ------------>
$string=$params[0];
$date_obj=$params[1];
$binary_obj=$params[2];

$date=$date_obj->scalar;
$binary_data=$binary_obj->scalar;

// 然後您可以繼續寫入二進位資料
fwrite($handle,$binary_data);
kelly at seankelly dot biz
21 年前
問題在於 PHP 有一個字串類型,它也用於儲存二進位資料和日期。但 XML-RPC 為字串、二進位資料和日期定義了三種不同的類型。您如何告知您希望字串如何被編碼?這就是這個函式的作用。

假設 XML-RPC 方法 "log.data" 接受一個字串、一個日期和一個二進位物件。為了告訴 XML-RPC 該日期(它是一個 PHP 字串)實際上是一個日期,並且該二進位資料(它也是一個 PHP 字串)實際上是二進位資料,請嘗試

$string = "我的紀錄事件。";
$date = "20030115T12:22:37"; // 必須是這個格式
$binary = fread($fp, 128);
xmlrpc_set_type(&$date, "datetime");
xmlrpc_set_type(&$binary, "base64");
$xmlrpcReq = xmlrpc_encode_request("log.data", array($string, $date, $binary));

請注意在呼叫 xmlrpc_set_type 時的傳址呼叫;這使函式能夠將值從字串更改為 xmlrpc_encode/_request 所期望的值(它們是包含一個額外欄位的物件,該欄位告知所需的 XML-RPC 類型)。
bmatheny at mobocracy dot net
18 年前
以下程式碼會導致某些較舊的(5.1.2 之前的)PHP 版本發生區段錯誤

$foo = date('c', time());
xmlrpc_set_type($foo, 'datetime');

請在回報錯誤之前升級。
To Top