Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1441 ariadna 1
## XML-RPC for PHP version 4.11.1 - 2025/1/17
2
 
3
* fixed: removed one warning emitted by the Server on php 8.4 and later (issue #125, thanks @ziegenberg)
4
 
5
 
6
## XML-RPC for PHP version 4.11.0 - 2024/9/7
7
 
8
* new: added new Client option `Client::OPT_EXTRA_HEADERS`, useful to set custom HTTP headers
9
 
10
* improved: compatibility with not-yet-released PHP version 8.4
11
 
12
 
13
## XML-RPC for PHP version 4.10.4 - 2024/06/27
14
 
15
* fixed: Response returned from the library in case of HttpException did not have set the correct `status_code` member var
16
 
17
 
18
## XML-RPC for PHP version 4.10.3 - 2024/04/24
19
 
20
* fixed: avoid emitting warnings when parsing some classes of malformed XML (issue #116)
21
 
22
* fixed: the library will now return a Fault `Response` object with error code 2 whenever parsing some xml responses
23
  which do not conform to the specification, namely those having both `fault` and `params` elements inside `methodResponse`
24
 
25
 
26
## XML-RPC for PHP version 4.10.2 - 2024/04/14
27
 
28
* fixed: allow `Server` subclasses to use their own Parser to determine the Request's charset
29
 
30
* fixed: the Server would not swallow and log php warnings generated from end user's method handler functions unless
31
  debug mode was set to 2 or higher. It now does that always.
32
 
33
* fixed: the library will now return a Fault `Response` object whenever parsing some xml responses which do not conform
34
  to the specification, namely the for following cases:
35
 
36
  - a `methodResponse` element without either `fault` or `params`
37
  - a `methodResponse` element with a `params` child which does not have a single `param`
38
 
39
* improved: test on PHP 8.3 as part of CI
40
 
41
 
42
## XML-RPC for PHP version 4.10.1 - 2023/02/22
43
 
44
* fixed: class autoloading got broken in rel 4.10.0 for users of the legacy API (issue #111)
45
 
46
* fixed: let the Server create Response objects whose class can be overridden by subclasses (this is required by the
47
  json-rpc server now that the `xml_header` method has been moved to the `Request` object)
48
 
49
* fixed: let the Client create Requests whose class can be overridden by subclasses, within the `_try_multicall` method,
50
  which is called from `multicall`
51
 
52
* fixed: declare the library not to be compatible with old versions of 'phpxmlrpc/extras' and 'phpxmlrpc/jsonrpc'
53
 
54
 
55
## XML-RPC for PHP version 4.10.0 - 2023/02/11
56
 
57
* changed: the minimum php version required has been increased to 5.4
58
 
59
* changed: dropped support for parsing cookie headers which follow the obsolete Cookie2 specification
60
 
61
* new: it is now possible to make the library generate warning messages whenever a deprecated feature is used, such as
62
  calling deprecated methods, using deprecated method parameters, or reading/writing deprecated object properties.
63
  This is disabled by default, and can be enabled by setting `PhpXmlRpc\PhpXmlRpc::xmlrpc_silence_deprecations = false`.
64
  Note that the deprecation warnings will be by default added to the php error log, and not be displayed on screen.
65
  If you prefer them to be handled in some other way, you should take over the Logger, as described below here
66
 
67
* new: allow to specify other charsets than the canonical three (UTF-8, ISO-8859-1, ASCII), when mbstring is
68
  available, both for outgoing and incoming data (issue #42).
69
 
70
  For outgoing data, this can be set in `$client->request_charset_encoding` and `$server->response_charset_encoding`.
71
  The library will then transcode the data fed to it by the application into the desired charset when serializing
72
  it for transmission.
73
 
74
  For incoming data, this can be set using `PhpXmlRpc::$internal_encoding`. The library will then transcode the data
75
  received from 3rd parties into the desired charset when handling it back to the application.
76
 
77
  An example of using this feature has been added to demo file `windowscharset.php`
78
 
79
* new: allow the library to pass to the application DateTime objects instead of string for all _received_ dateTime.iso8601
80
  xml-rpc values. This includes both client-side, for data within the `$response->value()`, and server-side, for data
81
  passed to xml-rpc method handlers, and works for both 'xmlrpcvals' and 'phpvals' modes.
82
  In order to enable this, you should set `PhpXmlRpc\PhpXmlRpc::$xmlrpc_return_datetimes = true`.
83
 
84
  NB: since the xml-rpc spec mandates that no Timezone is used on the wire for dateTime values, the DateTime objects
85
  created by the library will be set to the default php timezone, set using the 'date.timezone' ini setting.
86
 
87
  NB: if the received strings are not parseable as dates, NULL will be returned instead of an object, but that can
88
  be avoided by setting `PhpXmlRpc\PhpXmlRpc::$xmlrpc_reject_invalid_values = true`, see below.
89
 
90
* improved: be more strict in the `Response` constructor and in `Request::addParam`: both of those will now generate
91
  an error message in the log if passed unexpected values
92
 
93
* improved: be more strict in the data accepted as valid for dateTime xml-rpc values. Clearly invalid dates such as a
94
  month '13', day '32' or hour '25' will cause an error message to be logged or the value to be rejected, depending
95
  on configuration
96
 
97
* improved: be more strict in the data accepted as valid for 'float' and 'int' xml-rpc values. If you need to allow
98
  different formats for numbers, you can set a custom value to `PhpXmlRpc\PhpXmlRpc::$xmlrpc_double_format` and
99
  `PhpXmlRpc\PhpXmlRpc::$xmlrpc_int_format`
100
 
101
* new: allow the library to be stricter in parsing the received xml: by setting
102
  `PhpXmlRpc\PhpXmlRpc::$xmlrpc_reject_invalid_values = true`, incoming xml which has data not conforming to the expected
103
  format for value elements of type date, int, float, double, base64 and methodname will be rejected instead of passed
104
  on to the application. The same will apply for elements of type struct-member which miss either the name or the value
105
 
106
* new: it is now possible to tell the library to allow non-standard formats for received datetime value, such as f.e.
107
  datetimes with a timezone specifier, by setting a custom value to `PhpXmlRpc\PhpXmlRpc::$xmlrpc_datetime_format`
108
  (issue #46).
109
 
110
* new: it is now possible to tell the library to allow non-standard formats for received int and float values, as well
111
  as for methdoname elements. See the api docs for `PhpXmlRpc\PhpXmlRpc` static variables.
112
 
113
* fixed: when a server is configured with its default value of 'xmlrpcvals' for `$functions_parameters_type`, and
114
  a method handler in the dispatch was defined with `'parameters_type' = 'phpvals'`, the handler would be passed a
115
  Request object instead of plain php values.
116
 
117
* fixed: made sure all debug output goes through the logger at response parsing time (there was one printf call left)
118
 
119
* fixed: `Client::send` will now return an error Response when it is requested to use an auth method that it does not
120
  support, instead of logging an error message and continuing with another auth schema. The returned error code is 20
121
 
122
* fixed: when calling `Client::multicall()` with `$client->return_type = 'xml'`, the code would be always falling back to
123
  non-multicall requests
124
 
125
* fixed: support calling `Client::setSSLVersion()` for the case of not using curl transport
126
 
127
* fixed: receiving integers which use the '<EX:I8>' xml tag
128
 
129
* fixed: setting/retrieving the php value from a Value object using array notation would fail if the object was created
130
  using `i4` then accessed using `int`, eg: `$v = new Value(1, 'i4'); $v[$v->scalrtyp()] = 2;`
131
 
132
* fixed: setting values to deprecated Response property `cookies` would trigger a PHP notice, ex:
133
  `$response->_cookies['name'] = ['value' => 'something'];` (introduced in 4.6.0)
134
 
135
* fixed: made deprecated method `Value::structEach` work again with php 8.0 and later
136
 
137
* new: method `PhpXmlRpc::useInteropFaults()` can be used to make the library change the error codes it generates to
138
  match the spec described at https://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php
139
 
140
* new: both `Request` and `Response` acquired methods `getPayload` and `getContentType`
141
 
142
* new: method `Response::valueType()`
143
 
144
* new: method `Client::getUrl()`
145
 
146
* new: method `Server::setDispatchMap()`
147
 
148
* new: added methods `getOption`, `setOption`, `setOptions` and `getOptions` to both Client and Server, meant to replace
149
  direct access to _all public properties_ as well as the `$timeout` argument in calls to `Client::send` and `Client::multicall`
150
 
151
* new: by using `Client::setOption('extracurlopts')`, it is possible to pass in protocol=specific options for when
152
  using the Socket http transport. The value has to be an array with key being 'socket' or 'ssl', and the value an array
153
  (see https://www.php.net/manual/en/context.socket.php and https://www.php.net/manual/en/context.ssl.php)
154
 
155
* new: it is now possible to inject a custom logger into helper classes `Charset`, `Http`, `XMLParser`, inching a step
156
  closer to supporting DIC patterns (issue #78)
157
 
158
* new: method `PhpXmlRpc::setLogger()`, to simplify injecting a custom logger into all classes of the library in one step
159
 
160
* improved: the Client will automatically try to use cURL for requests using Digest/NTLM auth, unless told explicitly
161
  told not to do so via option 'use_curl'
162
 
163
* improved: the Client is more verbose in logging issues when trying to compress a Request for sending
164
 
165
* improved: the `Logger` class now sports methods adhering to Psr\Log\LoggerInterface
166
 
167
* improved: limit the size of incoming data which will be used in error responses and logged error messages, making
168
  it slightly harder to carry out DOS attacks against the library
169
 
170
* new: passing value -1 to `$client->setDebug` will avoid storing the full http response data in the returned Response
171
  object when executing `call`. This could be useful in reducing memory usage for big responses
172
 
173
* new: when calling `Wrapper::wrapXmlrpcMethod` and `wrapXmlrpcServer`, it is possible to pass 'throw_on_fault' as option
174
  to argument `$extraOptions`. This will make the generated function throw on http errors and xml-rpc faults instead of
175
  returning a Response object
176
 
177
* new: when calling `Wrapper::wrapXmlrpcMethod`, `wrapXmlrpcServer`, `wrapPhpFunction` and `wrapPhpClass` it is possible
178
  to pass 'encode_nulls' as option to argument `$extraOptions`. This will make the generated code emit a '<nil/>'
179
  xml-rpc element for php null values, instead of emitting an empty-string xml-rpc element
180
 
181
* new: methods `Wrapper::holdObject()` and `Wrapper::getheldObject()`, allowing flexibility in storing object instances
182
  for code-generation scenarios involving `Wrapper::wrapPhpClass` and `Wrapper::wrapPhpFunction`
183
 
184
* improved: all `Value` methods now follow snakeCase convention
185
 
186
* improved: all the Exceptions thrown by the library are now `\PhpXmlRpc\Exception` or subclasses thereof
187
 
188
* improved: all the Client's `setSomething()` methods now return the client object, allowing for usage of fluent style
189
  calling. The same applies to `Request::setDebug`
190
 
191
* improved: when calling `Client::multicall()`, the returned `Response` objects did not have any data in their `httpResponse`
192
 
193
* new: method `Helper\Date::iso8601Encode` now accepts a DateTime input beside a timestamp
194
 
195
* new: in the dispatch map, it is now possible to set different exception handling modes for each exposed xml-rpc method
196
 
197
* new: method `Server::add_to_map` is deprecated in favour of `addToMap`. It has also acquired new parameters:
198
  `$parametersType = false, $exceptionHandling = false`
199
 
200
* improved: the `XMLParser` accepts more options in its constructor (see phpdocs for details)
201
 
202
* improved: removed usage of `extension_loaded` in favour of `function_exists` when checking for mbstring. This allows
203
  for mbstring functions to be polyfilled
204
 
205
* improved: the code generated by the various code-generating methods of `Wrapper` are formatted better, and include
206
  more phpdoc blocks too
207
 
208
* improved: made the `Wrapper` and `Client` classes easy to subclass for use by the PhpJsonRpc library
209
 
210
* improved: added the library version number to the debugger title line
211
 
212
* improved: the debugger will now sport the "load method synopsis" button when interacting with json-rpc servers
213
 
214
* improved: added an example Symfony Client and Server to the demo files (using Symfony 6 / PHP 8 syntax)
215
 
216
* improved: added to the `taskfile` command an option to automatically set up the git hooks for development
217
 
218
* improved: made sure the test container and gha test runners have at least one locale with comma as decimal separator
219
 
220
* BC notes:
221
 
222
  *NB* Given the considerable amount of API changes in this release, a set of tables listing every change has been
223
  added in doc/api_changes_v4.10.md; a textual description follows.
224
 
225
  Besides what can be inferred from the changes listed above, for library users:
226
 
227
  - the data passed to the application is not encoded anymore in UTF-8 when setting `PhpXmlRpc::$internal_encoding`
228
    to a custom character set and the mbstring extension is enabled. It will be encoded instead in the specified character
229
    set. We expect this to affect few users, as setting `PhpXmlRpc::$internal_encoding` to a custom character set did
230
    not make a lot of sense beforehand
231
  - the regular expression used to check if incoming int and double values are valid has been tightened. That can be
232
    tweaked via use of `PhpXmlRpc\PhpXmlRpc::$xmlrpc_double_format` and `PhpXmlRpc\PhpXmlRpc::$xmlrpc_int_format`
233
  - the regular expression used to check if incoming datetime values are valid has been tightened to reject clearly
234
    invalid dates. It has been widened as well, to allow leap seconds. That can be tweaked via use of
235
    `PhpXmlRpc\PhpXmlRpc::$xmlrpc_datetime_format`
236
  - a regular expression has been introduced to check incoming 'methodname' elements. In the default configuration it
237
    will trigger error messages in the logs, but not reject the calls. It can be tweaked via use of
238
    `PhpXmlRpc\PhpXmlRpc::$xmlrpc_methodname_format`
239
  - an error message will now be generated if, in incoming data, a STRUCT element has no NAME
240
  - parameters `$timeout` and `$method` are now considered deprecated in `Client::send()` and `Client::multicall()`
241
  - Client properties `$errno` and `$errstring` are now deprecated
242
  - direct access to all properties of Client and Server is now deprecated and should be replaced by calls to
243
    `setOption` / `getOption`. The same applies to the following "setter" methods of the Client: `setSSLVerifyPeer`,
244
    `setSSLVerifyHost`, `setSSLVersion`, `setRequestCompression`, `setCurlOptions`, `setUseCurl`, `setUserAgent`
245
  - direct access to `Wrapper::$objHolder` is now deprecated
246
  - the code generated by the debugger when using "Generate stub for method call" will throw on errors instead of
247
    returning a Response object
248
 
249
  For library extenders:
250
 
251
  - if you subclassed the `Server` class, and dynamically inject/manipulate the dispatch map, be aware that the server
252
    will now validate the methodname from the received request as soon as possible during the xml parsing phase, via
253
    a new method `methodNameCallback`. You might want to reimplement it and f.e. make it a NOOP to avoid such validation
254
  - new method `Response::xml_header` has replaced `Server::xml_header`. Take care if you had overridden the server
255
    version - you might need to override `Server::service`
256
  - the `$options` argument passed to `XMLParser::parse` will now contain both options intended to be passed down to
257
    the php xml parser, and further options used to tweak the parsing results. If you have subclassed `XMLParser`
258
    and reimplemented the `parse` methods, or wholesale replaced it, you will have to adapt your code: both for that,
259
    and for making sure that it sets `$this->current_parsing_options['xmlrpc_null_extension']` from
260
    `PhpXmlRpc::$xmlrpc_null_extension`
261
  - also, if you had reimplemented `XMLParser::parse`, be warned that:
262
    - you should return `$this->_xh` instead of void
263
    - the callers now treat differently results when `_xh['isf'] > 3`
264
  - `Client` protected methods `sendPayloadSocket`, `sendPayloadCURL` and `prepareCurlHandle` are now deprecated. They
265
    have been replaced by `sendViaSocket`, `sendViaCURL` and `createCurlHandle` respectively
266
  - if you subclassed the `Client` class, take care of new static variables `$requestClass` and `$responseClass`,
267
    which should be used to instantiate requests and responses
268
  - if you had been somehow interacting with private method `Client::_try_multicall`, be warned its returned data has
269
    changed: it now returns a Response for the cases in which it previously returned false, and an array of Response
270
    objects for the cases in which it previously returned a string
271
  - if you replaced the `Logger` class, take care that you will have to implement methods `error`, `warning` and `debug`
272
    (all is ok if you subclassed it)
273
  - calling method `Value::serializeData` is now deprecated
274
  - traits have been introduced for all classes dealing with Logger, XMLParser and CharsetEncoder; method `setCharsetEncoder`
275
    is now static
276
  - new methods in helper classes: `Charset::knownCharsets`, `Http::parseAcceptHeader`, `XMLParser::truncateValueForLog`
277
  - protected property `Server::$accepted_charset_encodings` is now deprecated
278
  - exception `\PhpXmlRpc\Exception\PhpXmlRpcException` is deprecated. Use `\PhpXmlRpc\Exception` instead
279
 
280
 
281
## XML-RPC for PHP version 4.9.5 - 2023/01/11
282
 
283
* improved: revised all demo files. Showcase more features in client demos; isolate better testsuite functions in
284
  server demos and make sure they are not active unless triggered by running the tests; add demos for code-generation
285
  for both clients and servers
286
 
287
* improved: added cli command `taskfile`, which can be used to download the demo files or the visualeditor component for
288
  the debugger (requires bash, curl and a smattering of other common unix/linux/macos? tools)
289
 
290
* improved: for php 7 and up, catch php Errors besides Exceptions thrown by method handler functions (ie. server-side)
291
 
292
* fixed: when using the Exception or Error thrown by a method handler function to build the xml-rpc response, override
293
  fault Code 0, as it breaks response serialization
294
 
295
 
296
## XML-RPC for PHP version 4.9.4 - 2023/1/7
297
 
298
* improved: updated the user's manual to be inline with the version4 API and modern coding practices.
299
  The manual is now bundled in the default distribution tarball, and is easily viewable as html, provided you can
300
  serve it using a webserver. It is also available as pdf at https://gggeek.github.io/phpxmlrpc/doc-4/phpxmlrpc_manual.pdf
301
 
302
* improved: automated the process of creating the github release when pushing a release-tag to GitHub; also add a tarball
303
  of the demo files as release asset, and automatically update both http://gggeek.github.io and the code on altervista.org
304
 
305
* improved: added a pre-push git hook script, to avoid pushing tagged versions with inconsistent version tags in code.
306
  To install it, execute `composer run-script setup-git-hooks` (NB: it is only useful for developers of this library,
307
  not for the developers simply using it)
308
 
309
* fixed: the value for error 'no_http2' has been switched from 15 to 19 to avoid a collision
310
 
311
 
312
## XML-RPC for PHP version 4.9.3 - 2022/12/20
313
 
314
* improved: avoid stalling the webserver when using the debugger with the php cli-webserver and testing the demo
315
  server within the same install
316
 
317
* improved: allow installation of the jsxmlrpc library within the debugger folder via composer or npm to enable the
318
  visual-editing capabilities of the debugger, as this works well when the debugger is used as web-root (target usage
319
  scenario being f.e. using the php cli-webserver to run the debugger)
320
 
321
 
322
## XML-RPC for PHP version 4.9.2 - 2022-12-18
323
 
324
* security fix: removed the possibility of an XSS attack in the debugger.
325
  Since the debugger is not designed to be exposed to end users but only to the developers using this library, and in
326
  the default configuration it is not exposed to requests from the web, the severity of this issue can be considered low.
327
 
328
* improved: the debugger now uses jsxmlrpc lib version 0.6. It loads it from a cdn rather than locally.
329
  It also can make use of a 2nd constant to help telling it where the visual-editor form the jsxmlrpc lib is located,
330
  in case its path on disk relative to the debugger and its url relative to the web root do not match.
331
 
332
 
333
## XML-RPC for PHP version 4.9.1 - 2022-12-12
334
 
335
* fixed: php warnings on php 8.2. This includes preferring usage of mbstring for converting between Latin1 and UTF-8
336
 
337
* improved: CI tests now also run on php 8.2
338
 
339
 
340
## XML-RPC for PHP version 4.9.0 - 2022/11/28
341
 
342
* security fix: hardened the `Client::send()` method against misuse of the `$method` argument (issue #81).
343
  Abusing its value, it was possible to force the client to _access local files_ or _connect to undesired urls_ instead
344
  of the intended target server's url (the one used in the Client constructor).
345
 
346
  This weakness only affects installations where all the following conditions apply, at the same time:
347
 
348
  - the xmlrpc Client is used, ie. not xmlrpc servers
349
  - untrusted data (eg. data from remote users) is used as value for the `$method` argument of method `Client::send()`,
350
    in conjunction with conditions which trigger usage of curl as http transport (ie. either using the https, http11 or
351
    http2 protocols, or calling `Client::setUseCurl()` beforehand)
352
  - either have set the Clients `return_type` property to 'xml', or make the resulting Response's object `httpResponse`
353
    member, which is intended to be used for debugging purposes only, available to 3rd parties, eg. by displaying it to
354
    the end user or serializing it in some storage (note that the same data can also be accessed via magic property
355
    `Response::raw_data`, and in the Request's `httpResponse` member)
356
 
357
  This is most likely a very uncommon usage scenario, and as such the severity of this issue can be considered low.
358
 
359
  If it is not possible to upgrade to this release of the library at this time, a proactive security measure, to avoid
360
  the Client accessing any local file on the server which hosts it, is to add the following call to your code:
361
 
362
      $client->setCurlOptions([CURLOPT_PROTOCOLS, CURLPROTO_HTTPS|CURLPROTO_HTTP]);
363
 
364
* security fix: hardened the `Wrapper::buildClientWrapperCode` method's code generation against _code injection_ via
365
  usage of a malevolent `$client` argument (issue #80).
366
 
367
  In order for this weakness to be exploited, the following conditions have to apply, at the same time:
368
 
369
  - method `Wrapper::buildClientWrapperCode`, or any methods which depend on it, such as `Wrapper::wrapXmlrpcServer`,
370
    `Wrapper::wrapXmlrpcMethod` or `Wrapper::buildWrapMethodSource` must be in use. Note that they are _not_ used by
371
    default in either the Client or Server classes provided by the library; the developer has to specifically make use
372
    of them in his/her own code
373
  - the `$client` argument to either of those methods should have been built with malicious data, ie. data controlled
374
    by a 3rd party, passed to its constructor call
375
 
376
  This is most likely an uncommon usage scenario, and as such the severity of this issue can be considered low.
377
 
378
  *NB* the graphical debugger which is shipped as part of the library is vulnerable to this, when used with the option
379
  "Generate stub for method call" selected. In that case, the debugger will _display_ but not _execute_ the
380
  malicious code, which would have to be provided via carefully crafted values for the "Address" and "Path" inputs.
381
 
382
  The attack scenario in this case is that a developer copies into his/her own source code the php snippet generated
383
  by the debugger, in a situation where the debugger is used with "Address"/"Path" input values supplied by a 3rd party.
384
  The malicious payload in the "Address"/"Path" input values should be easily recognized as suspicious by any barely
385
  proficient developer, as it resembles a bog-standard injection attack.
386
  It goes without saying that a responsible developer should not blindly copy and paste into his/her own code anything
387
  generated by a 3rd party tool, such as the phpxmlrpc debugger, without giving it at least a cursory scan.
388
 
389
* fixed: a php warning on php 8 when parsing responses which do not have a Content-Type header (issue #104)
390
 
391
* fixed: added a missing html-escaping call in demo file `introspect.php`
392
 
393
* fixed: decoding of responses with latin-1 charset declared in the xml prolog but not in http headers, when on php 5.4, 5.5
394
 
395
* fixed: DateTimeInterface is not present in php 5.4 (error introduced in ver. 4.8.1)
396
 
397
* fixed: use of uninitialized var when accessing nonexisting member of legacy class `xmlrpc_server` - thanks SonarQube
398
 
399
* new: the Client class now supports making calls which follow http redirections (issue #77). For that to work, use this code:
400
 
401
      $client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_ALWAYS);
402
      $client->setCurlOptions([CURLOPT_FOLLOWLOCATION => true, CURLOPT_POSTREDIR => 3]);
403
 
404
* new: allow users of the library to get more fine-grained information about errors in parsing received responses by
405
  overriding the integer value of `PhpXmlRpc::$xmlrpcerr['invalid_xml']`, `PhpXmlRpc::$xmlrpcerr['xml_not_compliant']`,
406
  `PhpXmlRpc::$xmlrpcerr['xml_parsing_error']` and the equivalent `PhpXmlRpc::$xmlrpcstr` strings (feature req. #101)
407
 
408
* improved: added the HTTP/2 protocol to the debugger
409
 
410
* improved: CI tests now run on php versions 5.4 and 5.5, besides all more recent ones
411
 
412
* improved: the test container for local testing now defaults to php 7.4 on ubuntu 20 focal
413
 
414
 
415
## XML-RPC for PHP version 4.8.1 - 2022/11/10
416
 
417
* improved: remove warnings with php 8.1 due to usage of `strftime` (issue #103)
418
 
419
* improved: cast correctly php objects sporting `DateTimeInterface` to phpxmlrpc datetime values
420
 
421
 
422
## XML-RPC for PHP version 4.8.0 - 2022/6/20
423
 
424
* fixed: the `benchmark.php` file had seen some tests accidentally dropped
425
 
426
* improved: added method `Client::prepareCurlHandle`, to make it easier to send multiple requests in parallel when using
427
  curl and the server does not support `system.multicall`. See new demo file `parallel.php` for how this can be done.
428
 
429
* fixed: error 'Class "PhpXmlRpc\Exception\PhpXmlrpcException" not found' when including `xmlrpc.inc` and on php 8.1
430
  (might also happen on other php versions) (issue #99)
431
 
432
 
433
## XML-RPC for PHP version 4.7.2 - 2022/5/25
434
 
435
* modified the strings used to tell the client to use http/2: to avoid users mistaking 'http2' for the preferred value,
436
  we switched to using `h2` and `h2c`
437
 
438
* improved: the `benchmark.php` file does now also test calls using https and http/2 protocols
439
 
440
 
441
## XML-RPC for PHP version 4.7.1 - 2022/5/25
442
 
443
* fixed: http/2 on non-https requests (known as h2c) works in either "prior-knowledge" mode or "upgrade" mode.
444
  Given the fact that "upgrade" mode is not compatible with POST requests, we switched to using "prior-knowledge" mode
445
  for requests sent with the `h2c` argument passed to the client's constructor or `send` method.
446
  NB: this means that requests sent with `h2c` are only compatible with servers and proxies known to be http/2 compliant.
447
 
448
 
449
## XML-RPC for PHP version 4.7.0 - 2022/5/25
450
 
451
* new: HTTP/2 is supported by both the Client and Server components (with the php cURL extension being required to use
452
  it client-side) (issue #94).
453
  To force the client to use http/2 over tls or http/2 over tcp requests, pass `h2` or `h2c` as 3rd argument to `Client::send`.
454
 
455
 
456
## XML-RPC for PHP version 4.6.1 - 2022/2/15
457
 
458
* fixed: one php warning with php 8 and up (issue #97)
459
 
460
 
461
## XML-RPC for PHP version 4.6.0 - 2021/12/9
462
 
463
* fixed: compatibility with php 8.1
464
 
465
* improved: when encoding utf-8 text into us-ascii xml, use character entity references for characters number 0-31
466
  (ascii non printable characters), as we were already doing when encoding ISO-8859-1 text into us-ascii xml
467
 
468
* new: method `Server::getDispatchMap()`. Useful for non-child classes which want to f.e. introspect the server
469
 
470
* new: increase flexibility in class composition by adopting a Dependency Injection (...ish) pattern:
471
  it is now possible to swap out the Logger, XMLParser and Charset classes with similar ones of your own making.
472
  Example code:
473
 
474
      // 1. create an instance of a custom character encoder
475
      // $myCharsetEncoder = ...
476
      // 2. then use it while serializing a Request:
477
      Request::setCharsetEncoder($myCharsetEncoder);
478
      $request->serialize($funkyCharset);
479
 
480
* new: method `XMLParser::parse()` acquired a 4th argument
481
 
482
* new: method `Wrapper::wrapPhpClass` allows to customize the names of the phpxmlrpc methods by stripping the original
483
  class name and accompanying namespace and replace it with a user-defined prefix, via option `replace_class_name`
484
 
485
* new: `Response` constructor gained a 4th argument
486
 
487
* deprecated: properties `Response::hdrs`, `Response::_cookies`, `Response::raw_data`. Use `Response::httpResponse()` instead.
488
  That method returns an array which also holds the http response's status code - useful in case of http errors.
489
 
490
* deprecated: method `Request::createPayload`. Use `Request::serialize` instead
491
 
492
* deprecated: property `Request::httpResponse`
493
 
494
* improved: `Http::parseResponseHeaders` now throws a more specific exception in case of http errors
495
 
496
* improved: Continuous Integration is now running on Github Actions instead of Travis
497
 
498
 
499
## XML-RPC for PHP version 4.5.2 - 2021/1/11
500
 
501
* improved: better phpdocs in the php code generated by the Wrapper class
502
 
503
* improved: debugger favicon and page title when used from the phpjsonrpc library
504
 
505
* fixed: allow `Encoder::decode` to properly support different target character sets for polyfill-xmlrpc decode functions
506
 
507
* improved: allow usage of 'epivals' for the 'parameters_type' member of methods definitions in the Server dispatch map
508
 
509
 
510
## XML-RPC for PHP version 4.5.1 - 2021/1/3
511
 
512
* improved: made it easier to subclass the Helper\Charset class by allowing `instance` to use late static binding
513
 
514
* fixed: reinstated access to xmlrpc_server->dmap (for users of the v3 API)
515
 
516
* fixed: method `xmlrpc_encode_entitites` (for users of the v3 API)
517
 
518
* improved: split the code of the demo server in multiple files, describing better the purpose of each
519
 
520
 
521
## XML-RPC for PHP version 4.5.0 - 2020/12/31
522
 
523
* new: it is now possible to control the precision used when serializing DOUBLE values via usage of
524
  `PhpXmlRpc::$xmlpc_double_precision`
525
 
526
* fixed: `Encoder::encode` would not correctly encode DateTime and DateTimeImmutable objects
527
 
528
* improvements to the `Helper\Date` class in rejecting invalid date strings
529
 
530
* improvements to the `Wrapper` class in identifying required arguments types from source code phpdoc: support 'array[]',
531
  'DateTime' and 'DateTimeImmutable'
532
 
533
* improvements to the support of the XMLRPC extension emulation (now provided by the phpxmlrpc/polyfill-xmlrpc package)
534
 
535
* minor improvements to the `Charset` helper: it now loads character set conversion tables on demand, leading to
536
  slightly lower memory usage and faster execution time when using UTF-8 everywhere.
537
  NB: take care if you have subclassed it!
538
 
539
* new method: `Server::isSyscall` - mostly of use to Server subclasses and friend classes such as introspectors
540
 
541
* internal method `XMLParser::xmlrpc_ee` now accepts 3 states for its 3rd parameter instead of a bool
542
 
543
* improvements in the inline phpdoc: tagged many methods and class member as reserved for internal usage only
544
 
545
* minor improvements in the debugger to allow easier integration of phpxmlrpc/jsonrpc and friends
546
 
547
* reorganized the test suite to be more manageable
548
 
549
* removed obsolete files from the 'extras' folder; updated and moved to the 'demo' folders the perl and python
550
  client scripts; moved benchmark.php and verify_compat.php to the 'extras' folder
551
 
552
 
553
## XML-RPC for PHP version 4.4.3 - 2020/12/17
554
 
555
* fixed: compatibility with PHP 8.0 (fixes to the debugger, to the server's 'system.methodHelp' method and to the
556
  PhpXmlRpc\Wrapper class).
557
  Note that method `Value::structeach` has not been removed from the API, but it is _not_ supported when running
558
  on PHP 8.0 or later - in that case it will always throw an Error.
559
 
560
* improvements to the test stack: it is now possible to run it via Docker besides Travis; avoid using _any_ external
561
  server when running tests; run Travis tests also on php 8.0; bump PHPUnit versions in use
562
 
563
 
564
## XML-RPC for PHP version 4.4.2 - 2020/3/4
565
 
566
* fixed: `client->setCookie()` bug: cookie values that contain spaces are now properly encoded in a way that gets them
567
  decoded back to spaces on the receiving end if the server running on php 7.4 (or does RFC-compliant cookie decoding).
568
  Beforehand we were encoding spaces to '+' characters.
569
 
570
 
571
## XML-RPC for PHP version 4.4.1 - 2019/7/29
572
 
573
* fixed: allow handling huge xml messages (>=10MB) (issue #71)
574
 
575
* improved: make it easier to overtake the library's usage of `error_log`
576
 
577
 
578
## XML-RPC for PHP version 4.3.2 - 2019/5/27
579
 
580
* fixed: remove one php 7.2 warning when using the v3 api
581
 
582
* improved: the Travis tests are now run with all php versions from 5.6 to 7.3. We dropped tests with php 5.3, 5.4 and 5.5
583
 
584
 
585
## XML-RPC for PHP version 4.3.1 - 2018/1/20
586
 
587
* fixed: error when using https in non-curl mode
588
 
589
* fixed: compatibility of tests with php 7.2
590
 
591
* fixed: html injection in sample code
592
 
593
* fixed: warnings emitted by the *legacy* server in xmlrpcs.inc
594
 
595
* fixed: encoding of php variables of type 'resource' when using xmlrpc_encode in php-compatibility mode
596
 
597
* fixed: bad html tag in sample code
598
 
599
* improved: text of error messages
600
 
601
 
602
## XML-RPC for PHP version 4.3.0 - 2017/11/6
603
 
604
* fixed: compatibility with Basic/Digest/NTLM auth when using client in cURL mode (issue #58)
605
 
606
* improved: added unit tests for Basic and Digest http auth. Also improved tests suite
607
 
608
* new: allow to force usage of curl for http 1.0 calls, as well as plain socket for https calls, via the method
609
  `Client::setUseCurl()`
610
 
611
 
612
## XML-RPC for PHP version 4.2.2 - 2017/10/15
613
 
614
* fixed: compatibility with Lighttpd target servers when using client in cURL mode and request body size > 1024 bytes
615
  (issue #56)
616
 
617
 
618
## XML-RPC for PHP version 4.2.1 - 2017/9/3
619
 
620
* fixed: compatibility with php 7.2 (issue #55)
621
 
622
 
623
## XML-RPC for PHP version 4.2.0 - 2017/6/30
624
 
625
* improved: allow also `DateTimeImmutable` objects to be detected as a date when encoding
626
 
627
 
628
## XML-RPC for PHP version 4.1.1 - 2016/10/1
629
 
630
* fixed: error in server class: undefined function php_xmlrpc_encode (only triggered when not using the compatibility
631
  shim with old versions)
632
 
633
 
634
## XML-RPC for PHP version 4.1.0 - 2016/6/26
635
 
636
* improved: Added support for receiving `<I8>` and `<EX:I8>` integers, sending `<I8>`
637
 
638
  If php is compiled in 32 bit mode, and an i8 int is received from a 3rd party, and error will be emitted.
639
  Integers sent from the library to 3rd parties can be encoded using the i8 tag, but default to using 'int' by default;
640
  the developer will have to create values as i8 explicitly if needed.
641
  The library does *not* check if an outgoing integer is too big to fit in 4 bytes and convert it to an i8 automatically.
642
 
643
 
644
## XML-RPC for PHP version 4.0.1 - 2016/3/27
645
 
646
* improved: all the API documentation has been moved out of the manual and into the source code phpdoc comments
647
 
648
* fixed: when the internal character set is set to UTF-8 and the client sends requests (or the server responses), too
649
  many characters were encoded as numeric entities, whereas some, like åäö, needed not to be
650
 
651
* fixed: the 'valtyp' property of Response was not present in all cases; the ValType property had been added by error
652
  and has been removed
653
 
654
 
655
## XML-RPC for PHP version 4.0.0 - 2016/1/20
656
 
657
This release does away with the past and starts a transition to modern-world php.
658
 
659
Code has been heavily refactored, taking care to preserve backwards compatibility as much as possible,
660
but some breackage is to be expected.
661
 
662
The minimum required php version has been increased to 5.3, even though we strongly urge you to use more recent versions.
663
 
664
PLEASE READ CAREFULLY THE NOTES BELOW to insure a smooth upgrade.
665
 
666
* new: introduction of namespaces and full OOP.
667
 
668
  All php classes have been renamed and moved to separate files.
669
  Class autoloading can now be done in accord with the PSR-4 standard.
670
  All global variables and global functions have been removed.
671
  Iterating over xmlrpc value objects is now easier thank to support for ArrayAccess and Traversable interfaces.
672
 
673
  Backward compatibility is maintained via `lib/xmlrpc.inc`, `lib/xmlrpcs.inc` and `lib/xmlrpc_wrappers.inc`.
674
  For more details, head on to doc/api_changes_v4.md
675
 
676
* changed: the default character encoding delivered from the library to your code is now utf-8.
677
  It can be changed at any time setting a value to `PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding`
678
 
679
* improved: the library now accepts requests/responses sent using other character sets than UTF-8/ISO-8859-1/ASCII.
680
  This only works when the mbstring php extension is enabled.
681
 
682
* improved: no need to call anymore `$client->setSSLVerifyHost(2)` to silence a curl warning when using https
683
  with recent curl builds
684
 
685
* improved: the xmlrpcval class now supports the interfaces Countable and IteratorAggregate
686
 
687
* improved: a specific option allows users to decide the version of SSL to use for https calls.
688
  This is useful f.e. for the testing suite, when the server target of calls has no proper ssl certificate,
689
  and the cURL extension has been compiled with GnuTLS (such as on Travis VMs)
690
 
691
* improved: the function `wrap_php_function()` now can be used to wrap closures (it is now a method btw)
692
 
693
* improved: all wrap_something() functions now return a closure by default instead of a function name
694
 
695
* improved: debug messages are not html-escaped any more when executing from the command line
696
 
697
* improved: the library is now tested using Travis ( https://travis-ci.org/ ).
698
  Tests are executed using all php versions from 5.3 to 7.2; code-coverage information
699
  is generated using php 5.6 and uploaded to both Code Coverage and Scrutinizer online services
700
 
701
* improved: phpunit is now installed via Composer, not bundled anymore
702
 
703
* improved: when phpunit is used to generate code-coverage data, the code executed server-side is accounted for
704
 
705
* improved: the test suite has basic checks for the debugger and demo files
706
 
707
* improved: more tests in the test suite
708
 
709
* fixed: the server would not reset the user-set debug messages between subsequent `service()` calls
710
 
711
* fixed: the server would not reset previous php error handlers when an exception was thrown by user code and
712
  exception_handling set to 2
713
 
714
* fixed: the server would fail to decode a request with ISO-8859-1 payload and character set declaration in the xml
715
  prolog only
716
 
717
* fixed: the client would fail to decode a response with ISO-8859-1 payload and character set declaration in the xml
718
  prolog only
719
 
720
* fixed: the function `decode_xml()` would not decode an xml with character set declaration in the xml prolog
721
 
722
* fixed: the client can now successfully call methods using ISO-8859-1 or UTF-8 characters in their name
723
 
724
* fixed: the debugger would fail sending a request with ISO-8859-1 payload (it missed the character set declaration).
725
  It would have a hard time coping with ISO-8859-1 in other fields, such as e.g. the remote method name
726
 
727
* fixed: the debugger would generate a bad payload via the 'load method synopsis' button for signatures containing NULL
728
  or undefined parameters
729
 
730
* fixed: the debugger would generate a bad payload via the 'load method synopsis' button for methods with multiple
731
  signatures
732
 
733
* improved: the debugger is displayed using UTF-8, making it more useful to debug any kind of service
734
 
735
* improved: echo all debug messages even when there are characters in them which php deems to be in a wrong encoding;
736
  previously those messages would just disappear (this is visible e.g. in the debugger)
737
 
738
* changed: debug info handling
739
 
740
    - at debug level 1, the rebuilt php objects are not dumped to screen (server-side already did that)
741
    - at debug level 1, curl communication info are not dumped to screen
742
    - at debug level 1, the tests echo payloads of failures; at debug level 2 all payloads
743
 
744
* improved: makefiles have been replaced with a php_based pakefile
745
 
746
* improved: the source for the manual is stored in AsciiDoc format, which can be displayed natively by GitHub
747
  with nice html formatting. Also, the HTML version generated by hand and bundled in tarballs is much nicer
748
  to look at than previous versions
749
 
750
* improved: all PHP code is now formatted according to the PSR-2 standard
751
 
752
 
753
## XML-RPC for PHP version 3.0.0 - 2014/6/15
754
 
755
This release corrects all bugs that have been reported and successfully reproduced since
756
version 3.0.0 beta.
757
 
758
The requirements have increased to php 5.1.0 - which is still way older than what you should be running for any serious
759
purpose, really.
760
 
761
It also is the first release to be installable via Composer.
762
 
763
See the Changelog file or the pdf docs for a complete list of changes.
764
 
765
 
766
## XML-RPC for PHP version 3.0.0 beta - 2009/09/05
767
 
768
This is the first release of the library to only support PHP 5.
769
Some legacy code has been removed, and support for features such as exceptions and DateTime objects introduced.
770
 
771
The "beta" tag is meant to indicate the fact that the refactoring has been more widespread than in precedent releases
772
and that more changes are likely to be introduced with time - the library is still considered to be production quality.
773
 
774
* improved: removed all usage of php functions deprecated in php 5.3, usage of assign-by-ref when creating new objects
775
  etc...
776
* improved: add support for the <ex:nil/> tag used by the apache library, both in input and output
777
* improved: add support for DateTime objects in both in php_xmlrpc_encode and as parameter for constructor of xmlrpcval
778
* improved: add support for timestamps as parameter for constructor of xmlrpcval
779
* improved: add option 'dates_as_objects' to php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes
780
* improved: add new method SetCurlOptions to xmrlpc_client to allow extra flexibility in tweaking http config, such as
781
  explicitly binding to an ip address
782
* improved: add new method setUserAgent to xmrlpc_client to allow having different user-agent http headers
783
* improved: add a new member variable in server class to allow fine-tuning of the encoding of returned values when the
784
  server is in 'phpvals' mode
785
* improved: allow servers in 'xmlrpcvals' mode to also register plain php functions by defining them in the dispatch map
786
  with an added option
787
* improved: catch exceptions thrown during execution of php functions exposed as methods by the server
788
* fixed: bad encoding if the same object is encoded twice using php_xmlrpc_encode
789
 
790
 
791
## XML-RPC for PHP version 2.2.2 - 2009/03/16
792
 
793
This release corrects all bugs that have been reported and successfully reproduced since version 2.2.1.
794
Regardless of the intimidating message about dropping PHP 4 support, it still does support that ancient, broken and
795
insecure platform.
796
 
797
* fixed: php warning when receiving 'false' in a bool value
798
* fixed: improve robustness of the debugger when parsing weird results from non-compliant servers
799
* fixed: format floating point values using the correct decimal separator even when php locale is set to one that uses
800
  comma
801
* fixed: use feof() to test if socket connections are to be closed instead of the number of bytes read (rare bug when
802
  communicating with some servers)
803
* fixed: be more tolerant in detection of charset in http headers
804
* fixed: fix encoding of UTF-8 chars outside the BMP plane
805
* fixed: fix detection of zlib.output_compression
806
* improved: allow the add_to_map server method to add docs for single params too
807
* improved: added the possibility to wrap for exposure as xmlrpc methods plain php class methods, object methods and
808
  even whole classes
809
 
810
 
811
## XML-RPC for PHP version 2.2.1 - 2008/03/06
812
 
813
This release corrects all bugs that have been reported and successfully reproduced.
814
It is the last release of the library that will support PHP 4.
815
 
816
* fixed: work around bug in php 5.2.2 which broke support of HTTP_RAW_POST_DATA
817
* fixed: is_dir parameter of setCaCertificate() method is reversed
818
* fixed: a php warning in xmlrpc_client creator method
819
* fixed: parsing of '1e+1' as valid float
820
* fixed: allow errorlevel 3 to work when prev. error handler was a static method
821
* fixed: usage of client::setcookie() for multiple cookies in non-ssl mode
822
* improved: support for CP1252 charset is not part or the library but almost possible
823
* improved: more info when curl is enabled and debug mode is on
824
 
825
 
826
## XML-RPC for PHP version 2.2 - 2007/02/25
827
 
828
This release corrects a couple of bugs and adds a few minor features.
829
 
830
* fixed: debugger errors on php installs with magic_quotes_gpc on
831
* fixed: support for https connections via proxy
832
* fixed: wrap_xmlrpc_method() generated code failed to properly encode php objects
833
* improved: slightly faster encoding of data which is internally UTF-8
834
* improved: debugger always generates a 'null' id for jsonrpc if user omits it
835
* new: debugger can take advantage of a graphical value builder (it has to be downloaded separately, as part of
836
  jsxmlrpc package)
837
* new: support for the <NIL/> xmlrpc extension
838
* new: server support for the system.getCapabilities xmlrpc extension
839
* new: wrap_xmlrpc_method() accepts two new options: debug and return_on_fault
840
 
841
 
842
## XML-RPC for PHP version 2.1 - 2006/08/28
843
 
844
This release corrects quite a few bugs and adds some interesting new features.
845
There is a minor security enhancement and overall speedup too.
846
 
847
It has been tested with PHP 4.0.5 up to 4.4.4 and 5.1.5.
848
Please note that 404pl1 is NOT supported, and has not been since 2.0.
849
 
850
*** PLEASE READ CAREFULLY BELOW ***
851
 
852
CHANGES THAT MIGHT AFFECT DEPLOYED APPLICATIONS:
853
 
854
The wrap_php_function and wrap_xmlrpc_method functions have been moved out of the base library file xmlrpc.inc into a
855
file of their own: xmlrpc_wrappers.inc.
856
You will have to include() / require() it in your scripts if you have been using those functions.
857
 
858
For increased security, the automatic rebuilding of php object instances out of received xmlrpc structs in
859
wrap_xmlrpc_method() has been disabled (but it can be optionally reenabled).
860
 
861
The constructor of xmlrpcval() values has seen major changes, and it will not throw a php warning anymore when invoked
862
using an unknown xmlrpc type: the error will only be written to php error log. Also, new xmlrpcval('true', 'boolean')
863
is not supported anymore.
864
 
865
MAJOR IMPROVEMENTS:
866
 
867
The new function php_xmlrpc_decode_xml() will take the xml representation of either an xmlrpc request, response or
868
single value and return the corresponding php-xmlrpc object instance.
869
 
870
Both wrap_php_function() and wrap_xmlrpc_method() functions accept many more options to fine tune their behaviour,
871
including one to return the php code to be saved and later used as standalone php script.
872
 
873
A new function wrap_xmlrpc_server() has been added, to wrap all (or some) of the methods exposed by a remote xmlrpc
874
server into a php class.
875
 
876
Lib internals have been modified to provide better support for grafting extra functionality on top of it. Stay tuned for
877
future releases of the EXTRAS package.
878
 
879
Last but not least a new file has been added: verify_compat.php, to help users diagnose the level of compliance of the
880
current php install with the library.
881
 
882
CHANGELOG IN DETAIL:
883
 
884
* fixed bug 1311927: client not playing nice with some proxy/firewall on ports != 80
885
* fixed bug 1334340: all ereg_ functions have been replaced with corresponding preg_
886
* fixed bug: wrong handling of 'deflate' http encoding, both server and client side
887
* fixed bug: sending compressed responses when php output compression is enabled was not working
888
* fixed bug: addarray() and addstruct() where not returning 1 when adding data to already initialized values
889
* fixed bug: non-ascii chars used in struct element names where not being encoded correctly
890
* restored compatibility with php 4.0.5 (for those poor souls still stuck on it)
891
* server->service() now returns either the payload or xmlrpcresp instance
892
* server->add_to_map() now accepts methods with no param definitions
893
* added new function: php_xmlrpc_decode_xml()
894
* added new function: wrap_xmlrpc_server()
895
* major improvements and security enhancements to wrap_php_function() and wrap_xmlrpc_method()
896
* documentation for single parameters of exposed methods can be added to the dispatch map (and turned into html docs in
897
  conjunction with a future release of the extras package)
898
* full response payload is saved into xmlrpcresp object for further debugging
899
* stricter parsing of incoming xmlrpc messages: two more invalid cases are now detected (double data element inside
900
  array and struct/array after scalar inside value element)
901
* debugger can now generate code that wraps a remote method into php function (works for jsonrpc, too)
902
* debugger has better support for being activated via a single GET call (for integration into other tools?)
903
* more logging of errors in a lot of situations
904
* javadoc documentation of lib files almost complete
905
* the usual amount of new testcases in the testsuite
906
* many performance tweaks and code cleanups
907
* added foundation for emulating the API of the xmlrpc extension (extras package needed)
908
 
909
 
910
## XML-RPC for PHP version 2.0 - 2006/04/24
911
 
912
I'm pleased to announce ## XML-RPC for PHP version 2.0, final.
913
 
914
With respect to the last release candidate, this release corrects a few small bugs and adds a couple of new features:
915
more authentication options (digest and ntlm for servers, ntlm for proxies, and some https custom certificates stuff);
916
all the examples have been reviewed and some demo files added, including a ready-made xmlrpc proxy (useful e.g. for
917
ajax calls, when the xmlrpc client is a browser); the server logs more warning messages for incorrect situations; both
918
client and server are more tolerant of commonly-found mistakes.
919
The debugger has been upgraded to reflect the new client capabilities.
920
 
921
In greater detail:
922
 
923
* fixed bug: method xmlrpcval::structmemexists($value) would not work
924
* fixed bug: wrap_xmlrpc_method would fail if invoked with a client object that has return_type=phpvals
925
* fixed bug: in case of call to client::multicall without fallback and server error
926
* fixed bug: recursive serialization of xmlrpcvals loosing specified UTF-8 charset
927
* fixed bug: serializing to ISO-8859-1 with php 5 would raise an error if non-ascii chars where found when decoding
928
* new: client can use NTLM and Digest authentication methods for https and http 1.1 connections; authentication to
929
  proxy can be set to NTLM, too
930
* new: server tolerates user functions returning a single xmlrpcval object instead of an xmlrpcresp
931
* new: server does more checks for presence and correct return type of user coded method handling functions, and logs
932
  inconsistencies to php error log
933
* new: client method SetCaCertificate($cert, $is_dir) to validate server against
934
* new: both server and client tolerate receiving 'true' and 'false' for bool values (which btw are not valid according
935
  to the xmlrpc spec)
936
 
937
 
938
## XML-RPC for PHP version 2.0RC3 - 2006/01/22
939
 
940
This release corrects a few bugs and adds some interesting new features.
941
It has been tested with PHP up to 4.4.2 and 5.1.2.
942
 
943
* fixed bug: server not recognizing clients that declare support for http compression
944
* fixed bug: serialization of new xmlrpcval (8, 'string') when internal encoding
945
  set to UTF-8
946
* fixed bug: serialization of new xmlrpcval ('hello', 'int') would produce
947
  invalid xml-rpc
948
* new: let the server accept 'class::method' syntax in the dispatch map
949
* new: php_xmlrpc_decode() can decode xmlrpcmessage objects
950
* new: both client and server can specify a charset to be used for serializing
951
  values instead of the default 'US-ASCII+xml-entities-for-other-characters'.
952
  Values allowed: ISO-8859-1 and UTF-8
953
* new: the server object can register 'plain' php functions instead of functions
954
  that accept a single parameter of type xmlrpcmsg. Faster, uses less memory
955
  (but comes with minor drawbacks as well, read the manual for more details)
956
* new: client::setDebug(2) can be used to have the request payload printed to
957
  screen before being sent
958
* new: server::service($data) lets user parse data other than POST body, for
959
  easier testing / subclassing
960
* changed: framework-generated debug messages are sent back by the server base64
961
  encoded, to avoid any charset/xml compatibility problem
962
* other minor fixes
963
 
964
The usual refactoring of a lot of (private) methods has taken place, with new
965
parameters added to some functions.
966
Javadoc documentation has been improved a lot.
967
The HTML documentation has been shuffled around a bit, hoping to give it a more
968
logical organization.
969
 
970
The experimental support for the JSON protocol has been removed, and will be
971
packaged as a separate download with some extra very interesting stuff (human
972
readable auto-generated documentation, anyone?).
973
 
974
 
975
## XML-RPC for PHP version 2.0RC2 - 2005/11/22
976
 
977
This release corrects a few bugs and adds basically one new method for better
978
HTTPS support:
979
 
980
* fixed two bugs that prevented xmlrpc calls to take place over https
981
* fixed two bugs that prevented proper recognition of xml character set
982
  when it was declared inside the xml prologue
983
* added xmlrpc_client::setKey($key, $keypass) method, to allow using client
984
  side certificates for https connections
985
* fixed bug that prevented proper serialization of string xmlrpcvals when
986
  $xmlrpc_internalencoding was set to UTF-8
987
* fixed bug in xmlrpc_server::echoInput() (and marked method as deprecated)
988
* correctly set cookies/http headers into xmlrpcresp objects even when the
989
  send() method call fails for some reason
990
* added a benchmark file in the testsuite directory
991
 
992
A couple of (private/protected) methods have been refactored, as well as a
993
couple of extra parameters added to some (private) functions - this has no
994
impact on the public API and should be of interest primarily to people extending
995
/ subclassing the lib.
996
 
997
There is also new, PARTIAL support for the JSON-RPC protocol, implemented in
998
two files in the extras dir (more info about json-rpc at http://json-rpc.org)
999
 
1000
 
1001
## XML-RPC for PHP version 2.0RC1 - 2005/10/03
1002
 
1003
I'm pleased to announce ## XML-RPC for PHP version 2.0, release candidate 1.
1004
 
1005
This release introduces so many new features it is almost impossible to list them
1006
here, making the library finally on pair with, if not more advanced than, any other
1007
similar offer (e.g. the PEAR XMLRPC package or the Incutio IXR library).
1008
No, really, trust me.
1009
 
1010
The minimum supported PHP version is now 4.2 - natively - or 4.0.4pl1 - by usage of
1011
a couple of compatibility classes (code taken from PEAR php_compat package).
1012
 
1013
The placement of files and directories in the distribution has been deeply modified,
1014
in the hope of making it more clear, now that the file count has increased.
1015
I hope you find it easy.
1016
 
1017
Support for "advanced" HTTP features such as cookies, proxies and keep-alives has
1018
been added at last.
1019
 
1020
It is now much easier to convert between xmlrpcval objects and php values, and
1021
in fact php_xmlrpc_encode and php_xmlrpc_decode are now the recommended methods
1022
for all cases, except when encoding base64 data.
1023
 
1024
Two new (experimental) functions have been added, allowing automagic conversion
1025
of a php function into an xmlrpc method to be exposed and vice-versa.
1026
 
1027
PHP objects can be now automatically serialized as xmlrpc struct values and
1028
correctly deserialized on the other end of the transmission, provided that the
1029
same class definition is present on both sides and no object members are of
1030
type resource.
1031
 
1032
A lot of the existing class methods have been overloaded with extra parameters
1033
or new functionality, and a few added ex-novo, making usage easier than ever.
1034
 
1035
A complete debugger solution is included in the distribution. It needs a web server
1036
to run (a freely available version of the same debugger is accessible online, it
1037
can be found at http://phpxmlrpc.sourceforge.net).
1038
 
1039
For a more detailed list of changes, please read carefully chapter 2 of the
1040
included documentation, or, even better, take a look at the source code, which
1041
is commented in javadoc style quite a bit.
1042
 
1043
 
1044
## XML-RPC for PHP version 1.2.1 - 2005/09
1045
 
1046
This release restores compatibility with PHP3, which had been broken in release 1.2.
1047
The only other changes are some minor documentation updates and removal of unused
1048
files that had been erroneously packed in 1.2.
1049
 
1050
## XML-RPC for PHP version 1.2 - 2005/08/14
1051
 
1052
This removes all use of eval(), which is a potential security problem.
1053
All users are encouraged to upgrade as soon as possible.
1054
As of this release we are no longer php3-compatible.
1055
 
1056
 
1057
## XML-RPC for PHP version 1.1.1 - 2005/06/30
1058
 
1059
This is a security vulnerability fix release.
1060
All users are invited to upgrade as soon as possible.
1061
 
1062
 
1063
## XML-RPC for PHP version 1.1 - 2005/05/03
1064
 
1065
I'm pleased to announce ## XML-RPC for PHP version 1.1
1066
It's taken two years to get to this point, but here we are, finally.
1067
 
1068
This is a bugfix and maintenance release. No major new features have been added.
1069
All known bugs have been ironed out, unless fixing would have meant breaking
1070
the API.
1071
The code has been tested with PHP 3, 4 and 5, even tough PHP 4 is the main
1072
development platform (and some warnings will be emitted when running PHP5).
1073
 
1074
Noteworthy changes include:
1075
 
1076
 * do not clash any more with the EPI xmlrpc extension bundled with PHP 4 and 5
1077
 * fixed the unicode/charset problems that have been plaguing the lib for years
1078
 * proper parsing of int and float values prepended with zeroes or the '+' char
1079
 * accept float values in exponential notation
1080
 * configurable http user-agent string
1081
 * use the same timeout on client socket reads as used for connecting
1082
 * more explicative error messages in xmlrpcresponse in many cases
1083
 * much more tolerant parsing of malformed http responses from xmlrpc servers
1084
 * fixed memleak that prevented the client to be used in never-ending scripts
1085
 * parse bigger xmlrpc messages without crashing (1MB in size or more)
1086
 * be tolerant to xmlrpc responses generated on public servers that add
1087
   javascript advertising at the end of hosted content
1088
 * the lib generates quite a few less PHP warnings during standard operation
1089
 
1090
This is the last release that will support PHP 3.
1091
The next release will include better support for PHP 5 and (possibly) a slew of
1092
new features.
1093
 
1094
The changelog is available at:
1095
http://cvs.sourceforge.net/viewcvs.py/phpxmlrpc/xmlrpc/ChangeLog?view=markup
1096
 
1097
Please report bugs to the XML-RPC PHP mailing list or to the sourceforge project
1098
pages at http://sourceforge.net/projects/phpxmlrpc/
1099
 
1100
 
1101
## XML-RPC for PHP version 1.0
1102
 
1103
I'm pleased to announce ## XML-RPC for PHP version 1.0 (final). It's taken
1104
two years to get to the 1.0 point, but here we are, finally.  The major change
1105
is re-licensing with the BSD open source license, a move from the custom
1106
license previously used.
1107
 
1108
After this release I expect to move the project to SourceForge and find
1109
another primary maintainer for the code.  More details will follow to the
1110
mailing list.
1111
 
1112
It can be downloaded from http://xmlrpc.usefulinc.com/php.html
1113
 
1114
Comprehensive documentation is available in the distribution, but you
1115
can also browse it at http://xmlrpc.usefulinc.com/doc/
1116
 
1117
Bugfixes in this release include:
1118
 
1119
 * Small fixes and tidying up.
1120
 
1121
New features include:
1122
 
1123
 * experimental support for SSL via the curl extensions to PHP.  Needs
1124
   PHP 4.0.2 or greater, but not PHP 4.0.6 which has broken SSL support.
1125
 
1126
The changelog is available at: http://xmlrpc.usefulinc.com/ChangeLog.txt
1127
 
1128
Please report bugs to the XML-RPC PHP mailing list, of which more details are
1129
available at http://xmlrpc.usefulinc.com/list.html, or to
1130
<xmlrpc@usefulinc.com>.
1131
 
1132
 
1133
## XML-RPC for PHP version 1.0 beta 9
1134
 
1135
I'm pleased to announce ## XML-RPC for PHP version 1.0 beta 9. This is
1136
largely a bugfix release.
1137
 
1138
It can be downloaded from http://xmlrpc.usefulinc.com/php.html
1139
 
1140
Comprehensive documentation is available in the distribution, but you
1141
can also browse it at http://xmlrpc.usefulinc.com/doc/
1142
 
1143
Bugfixes in this release include:
1144
 
1145
 * Fixed string handling bug where characters between a </string>
1146
   and </value> tag were not ignored.
1147
 
1148
 * Added in support for PHP's native boolean type.
1149
 
1150
New features include:
1151
 
1152
 * new getval() method (experimental only) which has support for
1153
   recreating nested arrays.
1154
 * fledgling unit test suite
1155
 * server.php has support for basic interop test suite
1156
 
1157
The changelog is available at: http://xmlrpc.usefulinc.com/ChangeLog.txt
1158
 
1159
Please test this as hard as possible and report bugs to the XML-RPC PHP
1160
mailing list, of which more details are available at
1161
http://xmlrpc.usefulinc.com/list.html, or to <xmlrpc@usefulinc.com>.
1162
 
1163
 
1164
## XML-RPC for PHP version 1.0 beta 8
1165
 
1166
I'm pleased to announce ## XML-RPC for PHP version 1.0 beta 8.
1167
 
1168
This release fixes several bugs and adds a couple of new helper
1169
functions. The most critical change in this release is that you can no
1170
longer print debug info in comments inside a server method -- you must
1171
now use the new xmlrpc_debugmsg() function.
1172
 
1173
It can be downloaded from http://xmlrpc.usefulinc.com/php.html
1174
 
1175
Comprehensive documentation is available in the distribution, but you
1176
can also browse it at http://xmlrpc.usefulinc.com/doc/
1177
 
1178
Bugfixes in this release include:
1179
 
1180
 * fixed whitespace handling in values
1181
 * correct sending of Content-length from the server
1182
 
1183
New features include:
1184
 
1185
 * xmlrpc_debugmsg() method allows sending of debug info in comments in
1186
   the return payload from a server
1187
 
1188
 * xmlrpc_encode() and xmlrpc_decode() translate between xmlrpcval
1189
   objects and PHP language arrays. They aren't suitable for all
1190
   datatypes, but can speed up coding in simple scenarios. Thanks to Dan
1191
   Libby for these.
1192
 
1193
The changelog is available at: http://xmlrpc.usefulinc.com/ChangeLog.txt
1194
 
1195
Please test this as hard as possible and report bugs to the XML-RPC PHP
1196
mailing list, of which more details are available at
1197
http://xmlrpc.usefulinc.com/list.html, or to <xmlrpc@usefulinc.com>.
1198
 
1199
 
1200
## XML-RPC for PHP version 1.0 beta 7
1201
 
1202
I'm pleased to announce ## XML-RPC for PHP version 1.0 beta 7. This is
1203
fixes some critical bugs that crept in. If it shows itself to be stable
1204
then it'll become the 1.0 release.
1205
 
1206
It can be downloaded from http://xmlrpc.usefulinc.com/php.html
1207
 
1208
Comprehensive documentation is available in the distribution, but you
1209
can also browse it at http://xmlrpc.usefulinc.com/doc/
1210
 
1211
Bugfixes in this release include:
1212
 
1213
 * Passing of booleans should now work as expected
1214
 * Dollar signs and backslashes in strings should pass OK
1215
 * addScalar() now works properly to append to array vals
1216
 
1217
New features include:
1218
 
1219
 * Added support for HTTP Basic authorization through the
1220
   xmlrpc_client::setCredentials method.
1221
 
1222
 * Added test script and method for verifying correct passing of
1223
   booleans
1224
 
1225
The changelog is available at: http://xmlrpc.usefulinc.com/ChangeLog.txt
1226
 
1227
Please test this as hard as possible and report bugs to the XML-RPC PHP
1228
mailing list, of which more details are available at
1229
http://xmlrpc.usefulinc.com/list.html, or to <xmlrpc@usefulinc.com>.
1230
 
1231
 
1232
## XML-RPC for PHP version 1.0 beta 6
1233
 
1234
I'm pleased to announce ## XML-RPC for PHP version 1.0 beta 6. This is the
1235
final beta before the 1.0 release.
1236
 
1237
It can be downloaded from http://xmlrpc.usefulinc.com/php.html
1238
 
1239
Comprehensive documentation is available in the distribution, but you
1240
can also browse it at http://xmlrpc.usefulinc.com/doc/
1241
 
1242
New features in this release include:
1243
 
1244
 * Perl and Python test programs for the demo server
1245
 * Proper fault generation on a non-"200 OK" response from a remote host
1246
 * Bugfixed base64 decoding
1247
 * ISO8601 helper routines for translation to and from UNIX timestamps
1248
 * reorganization of code to allow eventual integration of alternative
1249
   transports
1250
 
1251
The changelog is available at: http://xmlrpc.usefulinc.com/ChangeLog.txt
1252
 
1253
Please test this as hard as possible and report bugs to the XML-RPC PHP
1254
mailing list, of which more details are available at
1255
http://xmlrpc.usefulinc.com/list.html, or to <xmlrpc@usefulinc.com>.