phpscript

command module
v0.3.1 Latest Latest
Warning

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

Go to latest
Published: Aug 20, 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
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.
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.
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.
ps
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