v4.0.0

@gggeek gggeek released this Jan 20, 2016 · 19 commits to master since this release

This release does away with the past and starts a transition to modern-world php.

The minimum required php version has been increased to 5.3, even though we strongly urge you to use more recent versions.

Code has been heavily refactored, taking care to preserve backwards compatibility as much as possible, but some breackage is to be expected.

For anyone upgrading from version 3, two choices are possible:

  • upgrade to the new API
  • a compatibility layer is available
    The details for both possibilities are described in detail in an upgrade document.

PLEASE READ CAREFULLY THE NOTES BELOW to insure a smooth upgrade.

  • new: introduction of namespaces and full OOP.

    All php classes have been renamed and moved to separate files.
    Class autoloading can now be done in accord with the PSR-4 standard.
    All global variables and global functions have been removed.
    Iterating over xmlrpc value objects is now easier thank to support for ArrayAccess and Traversable interfaces.

    Backward compatibility is maintained via lib/xmlrpc.inc, lib/xmlrpcs.inc and lib/xmlrpc_wrappers.inc.
    For more details, head on to doc/api_changes_v4.md

  • changed: the default character encoding delivered from the library to your code is now utf8.
    It can be changed at any time setting a value to PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding

  • improved: the library now accepts requests/responses sent using other character sets than UTF-8/ISO-8859-1/ASCII.
    This only works when the mbstring php extension is enabled.

  • improved: no need to call anymore $client->setSSLVerifyHost(2) to silence a curl warning when using https with recent curl builds

  • improved: the xmlrpcval class now supports the interfaces Countable and IteratorAggregate

  • improved: a specific option allows users to decide the version of SSL to use for https calls.
    This is useful f.e. for the testing suite, when the server target of calls has no proper ssl certificate, and the cURL extension has been compiled with GnuTLS (such as on Travis VMs)

  • improved: the function wrap_php_function() now can be used to wrap closures (it is now a method btw)

  • improved: all wrap_something() functions now return a closure by default instead of a function name

  • improved: debug messages are not html-escaped any more when executing from the command line

  • improved: the library is now tested using Travis ( https://travis-ci.org/ ).
    Tests are executed using all php versions from 5.3 to 7.0 nightly, plus HHVM; code-coverage information is generated using php 5.6 and uploaded to both Code Coverage and Scrutinizer online services

  • improved: phpunit is now installed via composer, not bundled anymore

  • improved: when phpunit is used to generate code-coverage data, the code executed server-side is accounted for

  • improved: the test suite has basic checks for the debugger and demo files

  • improved: more tests in the test suite

  • fixed: the server would not reset the user-set debug messages between subsequent service() calls

  • fixed: the server would not reset previous php error handlers when an exception was thrown by user code and exception_handling set to 2

  • fixed: the server would fail to decode a request with ISO-8859-1 payload and character set declaration in the xml prolog only

  • fixed: the client would fail to decode a response with ISO-8859-1 payload and character set declaration in the xml prolog only

  • fixed: the function decode_xml() would not decode an xml with character set declaration in the xml prolog

  • fixed: the client can now successfully call methods using ISO-8859-1 or UTF-8 characters in their name

  • fixed: the debugger would fail sending a request with ISO-8859-1 payload (it missed the character set declaration).
    It would have a hard time coping with ISO-8859-1 in other fields, such as e.g. the remote method name

  • fixed: the debugger would generate a bad payload via the 'load method synopsis' button for signatures containing NULL or undefined parameters

  • fixed: the debugger would generate a bad payload via the 'load method synopsis' button for methods with multiple signatures

  • improved: the debugger is displayed using UTF-8, making it more useful to debug any kind of service

  • improved: echo all debug messages even when there are characters in them which php deems to be in a wrong encoding; previously those messages would just disappear (this is visible e.g. in the debugger)

  • changed: debug info handling

    • at debug level 1, the rebuilt php objects are not dumped to screen (server-side already did that)
    • at debug level 1, curl communication info are not dumped to screen
    • at debug level 1, the tests echo payloads of failures; at debug level 2 all payloads
  • improved: makefiles have been replaced with a php_based pakefile

  • improved: the source for the manual is stored in asciidoc format, which can be displayed natively by GitHub with nice html formatting. Also the HTML version generated by hand and bundled in tarballs is much nicer to look at than previous versions

  • improved: all php code is now formatted according to the PSR-2 standard

Downloads