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(string &$value, string $type): bool

设置 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 = "My logging event.";
$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 = "My logging event.";
$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