Asynchronous esi:include filter for PHP 7.1+

0.4.1 2017-06-24 05:02 UTC

This package is auto-updated.

Last update: 2020-09-13 22:57:35 UTC


Build Status Coverage Status Scrutinizer Code Quality


Asynchronous ESI filter for PHP 7.1+. Its scans string for esi:include tags and replace with remote content. It's a simple replace for varnish server just for including esi content. The killer feature is that all request are made asynchronous, so it should be faster than varnish.

No that this version is just proof of concept. For production implementation wait for Octophpus 0.5.


  • PHP 7.1
  • Guzzle 6
  • cURL extension for PHP. Octopus will run without cURL, but multiple request will not work


The recommended way to install Octophpus is through Composer.

php composer.phar require crazygoat/octophpus

To upgrade to newest version execute:

php composer.phar update crazygoat/octophpus

Example code

include_once "../vendor/autoload.php";

$text = '<esi:include src=""/>';

$octophpus = new \CrazyGoat\Octophpus\EsiTentacles();
echo $octophpus->decorate($text);


  • Octophpus only handle esi:include from ESI spec.
  • All esi:include tags must contains full uri in src attribute. Uri must contain protocol, domain name and path. See below.
  • If data string contains two or esi:include tags with same src Octophpus will make multiple requests.

ESI tag format

Octophpus does not cover full specification ESI RFC. It also adds some esi:include parameters that are not part of RFC.

Minimal valid esi:include is listed below:

<esi:include src=""/>
    ^          ^                         ^
    1          2                         3
  1. esi:include tag name, it is no case sensitive.
  2. src must contains full URI.
  3. Tag must end with />. Tags like this <esi:include ... ></esi:include> will not work

Multi-line tag will work, so if you want to pass more parameters you can split it to more lines:



List of features to be add in the near feature. This list is not ordered.

  • New features
    • Add caching - use PSR-7 cache interface
    • Add hxInclude option on timeout
    • Add option to pass headers to requests (for example cookies, x-forwared-proto)
    • Add recurrence ESI requests
  • Deployment and maintenance
    • Prepare roadmap ticket, and remove this stuff
    • Travis - form running tests
  • Docs and examples
    • Create super duper logo
    • Add better docs
    • Add more examples
    • Add basic test