{"id":33990389,"url":"https://github.com/crazy-goat/octophpus","last_synced_at":"2026-06-01T04:04:23.020Z","repository":{"id":56958818,"uuid":"92592211","full_name":"crazy-goat/octophpus","owner":"crazy-goat","description":"Asynchronous ESI filter for PHP 7.1+","archived":false,"fork":false,"pushed_at":"2017-06-24T05:07:04.000Z","size":51,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-14T18:12:04.384Z","etag":null,"topics":["async","asynchronous","culr","esi","guzzle","php","varnish"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crazy-goat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-27T10:38:22.000Z","updated_at":"2018-03-07T19:46:24.000Z","dependencies_parsed_at":"2022-08-21T09:50:28.901Z","dependency_job_id":null,"html_url":"https://github.com/crazy-goat/octophpus","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/crazy-goat/octophpus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazy-goat%2Foctophpus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazy-goat%2Foctophpus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazy-goat%2Foctophpus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazy-goat%2Foctophpus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crazy-goat","download_url":"https://codeload.github.com/crazy-goat/octophpus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazy-goat%2Foctophpus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33759205,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async","asynchronous","culr","esi","guzzle","php","varnish"],"created_at":"2025-12-13T06:11:41.661Z","updated_at":"2026-06-01T04:04:23.003Z","avatar_url":"https://github.com/crazy-goat.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/crazy-goat/octophpus.svg?branch=master)](https://travis-ci.org/crazy-goat/octophpus)\n[![Coverage Status](https://coveralls.io/repos/github/crazy-goat/octophpus/badge.svg?branch=master)](https://coveralls.io/github/crazy-goat/octophpus?branch=master)\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/crazy-goat/octophpus/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/crazy-goat/octophpus/?branch=master)\n\n# Octophpus\nAsynchronous ESI filter for PHP 7.1+. Its scans string for `esi:include` tags \nand replace with remote content. It's a simple replace for varnish server just for \nincluding esi content. The killer feature is that all request are made \nasynchronous, so it should be **faster than varnish**.\n\n**No that this version is just proof of concept. For production implementation \nwait for Octophpus 0.5.**\n\n## Requirements \n* PHP 7.1\n* Guzzle 6 \n* cURL extension for PHP. _Octopus will run without cURL, but multiple request will not work_\n\n## Installation\n\nThe recommended way to install Octophpus is through [Composer](http://getcomposer.org).\n\n```bash\nphp composer.phar require crazygoat/octophpus\n```\n\nTo upgrade to newest version execute:\n\n```bash\nphp composer.phar update crazygoat/octophpus\n```\n\n## Example code\n\n```php\ninclude_once \"../vendor/autoload.php\";\n\n$text = '\u003cesi:include src=\"http://crazy-goat.com/\"/\u003e';\n\n$octophpus = new \\CrazyGoat\\Octophpus\\EsiTentacles();\necho $octophpus-\u003edecorate($text);\n```\n\n## Limitations\n\n* Octophpus only handle `esi:include` from ESI spec. \n* All `esi:include` tags must contains full uri in `src` attribute. Uri\n  **must** contain protocol, domain name and path. See below.\n* If data string contains two or `esi:include` tags with same `src` Octophpus\n  will make multiple requests.\n\n## ESI tag format\n\nOctophpus does not cover full specification [ESI RFC](https://www.w3.org/TR/esi-lang).\nIt also adds some `esi:include` parameters that are not part of RFC.\n\nMinimal valid `esi:include` is listed below:\n```html\n\u003cesi:include src=\"http://crazy-goat.com/\"/\u003e\n    ^          ^                         ^\n    1          2                         3\n```\n 1. `esi:include` tag name, it is no case sensitive.\n 1. `src` must contains full URI.\n 1. Tag must end with `/\u003e`. Tags like this `\u003cesi:include ... \u003e\u003c/esi:include\u003e`\n will not work\n\nMulti-line tag will work, so if you want to pass more parameters you can split it\nto more lines:\n\n```html\n\u003cesi:include \n    src=\"http://crazy-goat.com/\"\n/\u003e\n```\n## Roadmap\n\nList of features to be add in the near feature. _This list is not ordered._\n\n* New features\n    * Add caching - use PSR-7 cache interface\n    * Add [hxInclude](http://mnot.github.io/hinclude/) option on timeout\n    * Add option to pass headers to requests (for example cookies, x-forwared-proto)\n    * Add recurrence ESI requests\n* Deployment and maintenance\n    * Prepare roadmap ticket, and remove this stuff\n    * Travis - form running tests\n* Docs and examples\n    * Create super duper logo\n    * Add better docs\n    * Add more examples\n    * Add basic test\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrazy-goat%2Foctophpus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrazy-goat%2Foctophpus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrazy-goat%2Foctophpus/lists"}