Minimum Requirements - simplepie/simplepie-ng GitHub Wiki

Runtime

At a high level, these are the tools you need to run -- or develop for -- SimplePie NG.

  • PHP 7.2+ (curl, intl, opcache, mbstring, xml, zip)
  • Composer

NOTE: This document should be considered INFORMATIVE, but not CANONICAL. All canonical RFCs can be found at simplepie/rfc.

The better you understand this toolset, the smaller the learning curve you'll experience. The less you understand this toolset, the larger the learning curve you'll experience.

date

For working with dates. Should have an up-to-date timelib and "Olson" Timezone Database Version on the core system.

Known-good values from php -i:

date/time support => enabled
timelib version => 2017.05beta9
"Olson" Timezone Database Version => 2017.3
Timezone Database => internal
Default timezone => UTC

dom

All XML parsing is done with DOMDocument. Should have a modern libxml2 installed, and HTML + XPath support.

Known-good values from php -i:

DOM/XML => enabled
DOM/XML API Version => 20031129
libxml Version => 2.9.7
HTML Support => enabled
XPath Support => enabled
XPointer Support => enabled
Schema Support => enabled
RelaxNG Support => enabled

intl

The Internationalization extension simplifies the process of working with feeds from non-UTF-8 character encodings.

Known-good values from php -i:

Internationalization support => enabled
version => 1.1.0
ICU version => 60.2
ICU Data version => 60.2
ICU TZData version => 2017c
ICU Unicode version => 10.0

Directive => Local Value => Master Value
intl.default_locale => no value => no value
intl.error_level => 0 => 0
intl.use_exceptions => 0 => 0

json

All JSON parsing is done with the built-in json-d library.

Known-good values from php -i:

json support => enabled
json version => 1.6.0

libxml

Tested with libxml2 v2.9.7.

Known-good values from php -i:

libXML support => active
libXML Compiled Version => 2.9.7
libXML Loaded Version => 20907
libXML streams => enabled

mbstring

All string functions in SimplePie NG use the mb_ version.

Known-good values from php -i:

Multibyte Support => enabled
Multibyte string engine => libmbfl
HTTP input encoding translation => disabled
libmbfl version => 1.3.2
oniguruma version => 6.3.0

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

Multibyte (japanese) regex support => enabled
Multibyte regex (oniguruma) backtrack check => On
Multibyte regex (oniguruma) version => 6.3.0

Directive => Local Value => Master Value
mbstring.detect_order => no value => no value
mbstring.encoding_translation => Off => Off
mbstring.func_overload => 0 => 0
mbstring.http_input => no value => no value
mbstring.http_output => no value => no value
mbstring.http_output_conv_mimetypes => ^(text/|application/xhtml\+xml) => ^(text/|application/xhtml\+xml)
mbstring.internal_encoding => no value => no value
mbstring.language => neutral => neutral
mbstring.strict_detection => Off => Off
mbstring.substitute_character => no value => no value

opcache

This makes PHP faster.

Known-good values from php -i:

Opcode Caching => Disabled
Optimization => Disabled
SHM Cache => Enabled
File Cache => Disabled
Startup Failed => Opcode Caching is disabled for CLI

reflection

There is one spot in the type handling where we reflect the middleware to understand which interfaces the type class supports, instead of trying to hard-code known matches.

Known-good values from php -i:

Reflection => enabled
Version => $Id: 6cf0392a73b8c11a067a885da01dcdb18461c4f4 $

Development

All of the runtime dependencies, plus:

xdebug

Xdebug 2.6.0-alpha1 is the first version of Xdebug which supports PHP 7.2. This is recommended for generating code coverage reports when running tests. It is also useful for producing cachegrind files that can be used to find performance bottlenecks in your code.

It should never, ever, ever, ever, ever be run in production.

Known-good values from php -i:

xdebug support => enabled
Version => 2.6.0alpha1
IDE Key => rparman

Supported protocols => Revision
DBGp - Common DeBuGger Protocol => $Revision: 1.145 $

Docker and Docker Compose

There are a few development-oriented tasks which can be relatively complex, so I have wrapped those tasks up into Docker containers so that they always run consistently by avoiding environmental differences.

Docker leverages a feature called "containers" that is built into the Linux kernel. Docker runs natively on modern Linux kernels and operating systems. For macOS and Windows, Docker (the company) provides toolkits which -- in essence -- boot up miniature Linux VMs to run Docker (the software) through.

There are different pros and cons to leveraging Docker depending on how your environment is configured. If you're just looking for something quick, Docker for Mac/Windows is a good choice. If you're doing heavy development where I/O performance is important, I would recommend a Vagrant Linux VM running Docker, and using NFS (out of scope for this document).