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) - Eitherand
oror
to 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