Remote Port Middleware
, (*1)
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
., (*2)
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.), (*3)
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)., (*4)
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):, (*5)
$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:, (*6)
$remotePort = $request->getAttribute('remotePort'); // int|null
Error handling & edge cases
If REMOTE_PORT
is missing the attribute value will be null
., (*7)
Testing
You can simulate a request by constructing a PSR-7 ServerRequest
with a custom server params array:, (*8)
$request = $request->withServerParams(['REMOTE_PORT' => 54321]);
Contributing
PRs and issues are welcome. Please include tests where possible., (*9)
License
BSD-3-Clause. See the LICENSE
file for details., (*10)