phpscript

command module
v0.3.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 26, 2026 License: MIT Imports: 23 Imported by: 0

README

phpscript - A custom PHP-flavoured runtime written in Go

This is a PHP interpreter written in Go. It supports the basic php expression syntax and some parts of the standard library. It's currently rudimentary and only enables limited functionality.

Current state

Several unit focused test fixtures exists, namely:

  1. interfacing Go code from the PHP VM for callbacks,
  2. database client and usage from PHP side (bring your own database/sql driver)
  3. loading and executing template engine code

This means that phpscript is currently able to use a generic Database client. Our own standard library implements a Database class which is integration tested with ./tests/fixtures/test-database.php over several databases (pgx, mysql, sqlite).

Building a docker image

You can build a docker image from source as follows:

CGO_ENABLED=0 go build -o bin/ .
docker build -t titpetric/phpscript:latest -f docker/Dockerfile .

See ./compose.yml for usage.

Contributing

Contributions welcome. Open an issue to discuss before opening PRs.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Package annotations discovers annotated PHP files in a source tree and gives them a lifecycle: routed endpoints are served over HTTP, startup jobs run once before the server listens, and scheduled jobs run on an interval.
Package annotations discovers annotated PHP files in a source tree and gives them a lifecycle: routed endpoints are served over HTTP, startup jobs run once before the server listens, and scheduled jobs run on an interval.
cmd
Package config defines the config/config.yml configuration model.
Package config defines the config/config.yml configuration model.
Package flatstack provides the runner embedding API with an opt-in flat bytecode backend.
Package flatstack provides the runner embedding API with an opt-in flat bytecode backend.
engine
Package engine compiles model AST programs into flat bytecode and executes them against a host-provided PHP semantics bridge.
Package engine compiles model AST programs into flat bytecode and executes them against a host-provided PHP semantics bridge.
Package formatter pretty-prints phpscript ASTs in a gofmt-like style: hard tabs, canonical `function` keywords, parentheses on control structures, semicolons, collapsed blank lines, and a trailing newline.
Package formatter pretty-prints phpscript ASTs in a gofmt-like style: hard tabs, canonical `function` keywords, parentheses on control structures, semicolons, collapsed blank lines, and a trailing newline.
internal
apidoc
Package apidoc generates docs/reference/extensions/implemented-apis.md.
Package apidoc generates docs/reference/extensions/implemented-apis.md.
phpval
Package phpval holds PHP's value semantics: how a value converts to a string, an integer or a truth value, how a collection reads back as a list of values or strings, and how two values order under PHP 8's <=> operator.
Package phpval holds PHP's value semantics: how a value converts to a string, an integer or a truth value, how a collection reads back as a list of values or strings, and how two values order under PHP 8's <=> operator.
table
Package table renders a result table as an ansi box-drawing table on a terminal and as markdown everywhere else.
Package table renders a result table as an ansi box-drawing table on a terminal and as markdown everywhere else.
Package list builds a markdown inventory of PHP routes, files and classes.
Package list builds a markdown inventory of PHP routes, files and classes.
Package model holds the shared data structures (AST, runtime values, class metadata) used by both the parser and the runner packages.
Package model holds the shared data structures (AST, runtime values, class metadata) used by both the parser and the runner packages.
Package parser turns PHP source (the limited subset described in the project README) into the shared model AST consumed by the runner.
Package parser turns PHP source (the limited subset described in the project README) into the shared model AST consumed by the runner.
scripts
list-apis command
Command list-apis generates docs/reference/extensions/implemented-apis.md.
Command list-apis generates docs/reference/extensions/implemented-apis.md.
Package stdlib provides the forwarded "bring your own standard library" shims (the README's register_function mechanism).
Package stdlib provides the forwarded "bring your own standard library" shims (the README's register_function mechanism).
compat
Package compat implements PHP language surface that a script expects to be there rather than a library it calls: functions whose behaviour is defined by what the interpreter does, not by what they compute.
Package compat implements PHP language surface that a script expects to be there rather than a library it calls: functions whose behaviour is defined by what the interpreter does, not by what they compute.
core
Package core holds the part of PHP's standard library that computes: strings, arrays, json, the language constructs exposed as functions, the tokenizer, the environment and the platform surface a program expects to find before it does anything interesting.
Package core holds the part of PHP's standard library that computes: strings, arrays, json, the language constructs exposed as functions, the tokenizer, the environment and the platform surface a program expects to find before it does anything interesting.
crypto
Package crypto holds the password hashing a script cannot write for itself.
Package crypto holds the password hashing a script cannot write for itself.
database
Package database holds the named sql connections a phpscript runtime resolves through.
Package database holds the named sql connections a phpscript runtime resolves through.
files
Package files provides the filesystem shims phpscript exposes to PHP: path helpers, reads, writes, streams, and the uploaded-file functions that go with $_FILES.
Package files provides the filesystem shims phpscript exposes to PHP: path helpers, reads, writes, streams, and the uploaded-file functions that go with $_FILES.
http
Package http provides the HTTP\Client and HTTP\Request bindings, the outbound HTTP surface a script reaches instead of PHP's curl_* family.
Package http provides the HTTP\Client and HTTP\Request bindings, the outbound HTTP surface a script reaches instead of PHP's curl_* family.
internals
Package internals provides PHP internal memory and runtime introspection bindings.
Package internals provides PHP internal memory and runtime introspection bindings.
logger
Package logger writes a log line and fails the span the work runs in when that line reports an error.
Package logger writes a log line and fails the span the work runs in when that line reports an error.
session
Package session implements Session\Manager and the Session\Storage\* family: an HTTP-only cookie carrying an opaque, randomly generated session ID, and the storage the data behind that ID lives in.
Package session implements Session\Manager and the Session\Storage\* family: an HTTP-only cookie carrying an opaque, randomly generated session ID, and the storage the data behind that ID lives in.
span
Package span exposes telemetry spans to PHP as the start_span() binding, so a script can measure a region of its own work next to the spans the interpreter records for it.
Package span exposes telemetry spans to PHP as the start_span() binding, so a script can measure a region of its own work next to the spans the interpreter records for it.
Package telemetry binds github.com/titpetric/oida into the phpscript namespace: traces and spans recorded in process, with a server side rendered front end mounted at /debug/oida.
Package telemetry binds github.com/titpetric/oida into the phpscript namespace: traces and spans recorded in process, with a server side rendered front end mounted at /debug/oida.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL