Проблемы с глобальной регистрацией при регистрации параметров CLI в GET
Столкнулся со странным здесь, может быть, некоторые из более старших парней могут помочь мне прийти к выводу о том, что именно происходит (уже есть обходной путь, но хотел бы знать, как это исправить, поскольку, кажется, это может повлиять на других вещи)
Итак, у меня есть строка кода, которая обнаружит строку CLI (на основе типа [0]), а затем приступит к преобразованию и загрузке параметров CLI в параметры GET.
parse_str(implode("&", array_slice($payload['args'], 1)), $_GET);
Это прекрасно работает, вы можете проверить это с созданием файла и выпуском что-то вроде
php - f test.php -- foo=bar bar=baz
С содержимым файла, используя вышеуказанную строку и просто print_r($_GET);
Ну, это странно, когда вы пытаетесь использовать это как filter_input, я заметил, но не могу понять, почему
$filter = filter_input_array(INPUT_GET, [
'email' => FILTER_VALIDATE_EMAIL,
]);
print_r($filter); //empty
Это также выглядит как попытка привязать что-либо к GET-запросу. filter_input_array
в общем, экземпляр
http://localhost?request=foo
$_GET['email'] = 'Someguy@somplace.com';
//print_r($_GET); // check
print_r(filter_input_array(INPUT_GET, [
'email' => FILTER_VALIDATE_EMAIL,
'request' => FILTER_SANITIZE_ENCODED,
])):
Что работает, хотя по неизвестным причинам
$filter = filter_var_array($_GET, [
'email' => FILTER_VALIDATE_EMAIL,
]);
Не имеет для меня никакого смысла =(
Мне хотелось бы верить, что наш GET так или иначе не вошел в глобальную сферу, но мне не хватает, чтобы выяснить, почему...
Я использую PHP 5.5.8 для Saucy, ввод приветствуется
1 ответ
Функции filter_input_array() и filter_input() работают с фактическим вводом, а не с соответствующими глобальными переменными.
Из примечания в документации для filter_input:
Обратите внимание, что эта функция не (или, по крайней мере, не кажется) на самом деле фильтрует на основе текущих значений $_GET и т. Д. Вместо этого она, кажется, фильтрует на основе исходных значений.