90 lines
1.7 KiB
PHP
90 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace Origo\Services;
|
|
|
|
class Request {
|
|
|
|
/**
|
|
* Get a POST parameter.
|
|
*
|
|
* @param string $key
|
|
* The key.
|
|
* @param mixed $default
|
|
* The default value.
|
|
* @return mixed
|
|
* The value.
|
|
*/
|
|
public function post(string $key, $default = NULL) {
|
|
$input_stream = file_get_contents('php://input');
|
|
$input = [];
|
|
if ($input_stream) {
|
|
$parsed = parse_str($input_stream, $input);
|
|
}
|
|
else {
|
|
$input = $_POST;
|
|
}
|
|
return $input[$key] ?? $default;
|
|
}
|
|
|
|
/**
|
|
* Get a GET parameter.
|
|
*
|
|
* @param string $key
|
|
* The key.
|
|
* @param mixed $default
|
|
* The default value.
|
|
* @return mixed
|
|
* The value.
|
|
*/
|
|
public function get(string $key, $default = NULL) {
|
|
return $_GET[$key] ?? $default;
|
|
}
|
|
|
|
/**
|
|
* Get the request method.
|
|
*
|
|
* @return string
|
|
* The method.
|
|
*/
|
|
public function method(): string {
|
|
return $_SERVER['REQUEST_METHOD'];
|
|
}
|
|
|
|
/**
|
|
* Get the request IP.
|
|
*
|
|
* @return string
|
|
* The IP.
|
|
*/
|
|
public function ip(): string {
|
|
// Check common proxy headers first
|
|
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
|
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
|
|
return trim($ips[0]);
|
|
}
|
|
|
|
if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
|
|
return $_SERVER['HTTP_X_REAL_IP'];
|
|
}
|
|
|
|
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
|
|
return $_SERVER['HTTP_CLIENT_IP'];
|
|
}
|
|
|
|
// Fallback to REMOTE_ADDR
|
|
return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
|
|
}
|
|
|
|
/**
|
|
* Get a cookie.
|
|
*
|
|
* @param string $key
|
|
* The key.
|
|
* @return string
|
|
* The value.
|
|
*/
|
|
public function getCookie(string $key): string {
|
|
return $_COOKIE[$key] ?? '';
|
|
}
|
|
}
|