我需要验证 URL,然后下一个代码可以与 php 和 apache 完美运行:
$url = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_URL)
示例:使用此 URL:plantilla_mvc.net//////controlador/metodo/////argumentos
它正在转换为:/controlador/metodo/argumentos (没有 //////)
但是使用 nginx 却不行。
然后我尝试:
$url = filter_input(INPUT_SERVER,'REQUEST_URI',FILTER_SANITIZE_URL);
但是 filter_input不适用于 INPUT_SERVER
我怎么解决这个问题??
感谢您的帮助
答案1
看起来是一个已知问题,请参阅https://github.com/xwp/stream/issues/254
由于 PHP 确认了一个错误,filter_input(INPUT_SERVER,'anything') 会在 FCGI/PHP 5.4(可能还有更旧的版本)的某些实现上返回 null。 https://bugs.php.net/bug.php?id=49184
使用中提到的解决方法 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=730094:
if (filter_has_var(INPUT_SERVER, "SERVER_NAME")) {
$servername = filter_input(INPUT_SERVER, "SERVER_NAME",
FILTER_UNSAFE_RAW, FILTER_NULL_ON_FAILURE);
} else {
if (isset($_SERVER["SERVER_NAME"]))
$servername = filter_var($_SERVER["SERVER_NAME"],
FILTER_UNSAFE_RAW, FILTER_NULL_ON_FAILURE);
else
$servername = null;
}