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/phpnpx --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