A PHP stackable for Platformatic that enables running PHP applications within the Platformatic ecosystem. This package integrates PHP execution with Fastify servers, allowing you to serve PHP files alongside Node.js applications.
- π Run PHP applications within Platformatic services
- π Automatic request/response handling between Node.js and PHP
- π Static file serving for non-PHP assets
- β‘ Hot reloading during development
- π οΈ Code generation for new PHP projects
- π§ Environment-based configuration
- Node.js >= 22.14.0
- The PHP runtime is built thanks to
@platformatic/php-node.
npm install @platformatic/php
npx --package=@platformatic/php create-platformatic-php --dir my-php-app --port 3042
cd my-php-app
npm install
npm start--dir- Target directory (default:plt-php)--port- Server port (default:3042)--hostname- Server hostname (default:0.0.0.0)--main- Main PHP file (default:index.php)
The stackable uses a platformatic.json configuration file:
{
"$schema": "https://schemas.platformatic.dev/@platformatic/php/0.4.3.json",
"module": "@platformatic/php",
"php": {
"docroot": "public",
"rewriter": [
{
"operation": "and",
"conditions": [
{
"type": "path",
"args": ["^/api/.*"]
},
{
"type": "method",
"args": ["POST"]
}
],
"rewriters": [
{
"type": "path",
"args": ["api.php"]
}
]
}
]
},
"server": {
"hostname": "{PLT_SERVER_HOSTNAME}",
"port": "{PORT}",
"logger": { "level": "{PLT_SERVER_LOGGER_LEVEL}" }
},
"watch": true
}docroot(string, required) - Path to the root directory containing PHP filesrewriter(array, optional) - A sequence of conditional rewrites to apply to PHP requests- Each conditional rewrite is an object with:
operation(string, optional) - Eitherandororto combine conditions, defaults toand.conditions(array, optional) - List of conditions to match, if any- Each condition is an object with:
type(string, required) - Type of condition (e.g.,path,method)args(array, required) - Parameters for the condition
- Each condition is an object with:
rewriters(array, required) - List of rewriters to apply if conditions match- Each rewriter is an object with:
type(string, required) - Type of rewriter (e.g.,path,method)args(array, required) - Parameters for the rewriter
- Each rewriter is an object with:
- Each conditional rewrite is an object with:
Standard Platformatic server configuration options are supported.
A generated PHP project includes:
my-php-app/
βββ public/
β βββ index.php # Main PHP file
βββ .env # Environment variables
βββ .env.sample # Environment template
βββ .gitignore
βββ package.json
βββ platformatic.json # Platformatic configuration
npm start- Start the development servernpm test- Run testsnpm run build- Build schema and types
PLT_SERVER_HOSTNAME- Server hostname (default:0.0.0.0)PORT- Server port (default:3042)PLT_SERVER_LOGGER_LEVEL- Log level (default:info)
- Request Routing: All HTTP requests are captured by wildcard routes
- PHP Execution: Requests are forwarded to PHP via
@platformatic/php-node - Static Files: Non-PHP files in the docroot are served statically
- Response Handling: PHP responses are processed and returned through Fastify
import { stackable } from '@platformatic/php' // or import php from '@platformatic/php'
import { Generator } from '@platformatic/php' const generator = new Generator() generator.setConfig({ targetDirectory: './my-app', port: 3042, hostname: '0.0.0.0' }) await generator.run()
<?php // public/index.php header("Content-Type: application/json"); echo json_encode([ "message" => "Hello from PHP!", "timestamp" => date('c') ]); ?>
<?php // public/api.php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input = json_decode(file_get_contents('php://input'), true); header("Content-Type: application/json"); echo json_encode([ "received" => $input, "method" => $_SERVER['REQUEST_METHOD'] ]); } ?>
This project is part of the Platformatic ecosystem. Please refer to the main repository for contribution guidelines.
Apache-2.0