luisinder / remote-port-middleware
PSR-7 / PSR-15 middleware that determines the client remote TCP port and stores it as a ServerRequest attribute (remotePort). Compatible with Slim 3 (legacy) & Slim 4+.
Requires
- php: >=8.0
- psr/http-message: ^1.0 || ^2.0
- psr/http-server-middleware: ^1.0
Suggests
- slim/slim: Use Slim Framework (v4+) to integrate this middleware in a Slim app
This package is auto-updated.
Last update: 2025-08-10 16:01:20 UTC
README
PSR-7 / PSR-15 middleware that determines the client's remote TCP port (from the REMOTE_PORT
server param) and stores it as a ServerRequest
attribute named remotePort
.
Works with:
- Slim 4+ (PSR-15 single-pass)
- Slim 3 (legacy double-pass) – still supported for backwards compatibility
- Any PSR-15 compatible framework (Mezzio, etc.)
Requirements
- PHP >= 8.0
- psr/http-message ^1.0 || ^2.0
- psr/http-server-middleware ^1.0
Installation
composer require luisinder/remote-port-middleware
How it works
On each request the middleware inspects $request->getServerParams()['REMOTE_PORT']
(if present) and attaches it to the request as remotePort
(integer or null
if missing).
Usage (Slim 4+)
use Slim\Factory\AppFactory; use Luisinder\Middleware\RemotePort; require __DIR__ . '/vendor/autoload.php'; $app = AppFactory::create(); $app->add(RemotePort::class); // or new RemotePort() $app->get('/', function ($request, $response) { $remotePort = $request->getAttribute('remotePort'); $response->getBody()->write('Remote port: ' . ($remotePort ?? 'unknown')); return $response; }); $app->run();
Container registration (optional)
If you prefer adding via DI container (e.g. using PHP-DI):
$container->set(RemotePort::class, function() { return new RemotePort(); }); $app->add(RemotePort::class);
Usage (Slim 3 legacy)
$app->add(new Luisinder\Middleware\RemotePort()); $app->get('/', function ($request, $response) { $remotePort = $request->getAttribute('remotePort'); return $response->write('Remote port: ' . ($remotePort ?? 'unknown')); });
Attribute name
The attribute key is remotePort
. Example:
$remotePort = $request->getAttribute('remotePort'); // int|null
Error handling & edge cases
If REMOTE_PORT
is missing the attribute value will be null
.
Testing
You can simulate a request by constructing a PSR-7 ServerRequest
with a custom server params array:
$request = $request->withServerParams(['REMOTE_PORT' => 54321]);
Contributing
PRs and issues are welcome. Please include tests where possible.
License
BSD-3-Clause. See the LICENSE
file for details.