PHP filter_input (INPUT_SERVER, 'REQUEST_METHOD') возвращает null?

Почему эта строка возвращает null на моем реальном сервере?

 filter_input(INPUT_SERVER, 'REQUEST_METHOD'); 

Живой сервер php5.5.9

Я что-то пропустил?

Я думал, что он используется для замены глобального метода ниже?

 $_SERVER['REQUEST_METHOD']; 

некоторые из кода,

 public function __construct() { // Construct other generic data. $this->clientRequestMethod = filter_input(INPUT_GET, 'method'); // such as list, add, update, etc $this->clientPostMethod = filter_input(INPUT_POST, 'method'); // such as update $this->serverRequestMethod = filter_input(INPUT_SERVER, 'REQUEST_METHOD'); //such as get or post } public function processEntry() { // Determine the $_SERVER['REQUEST_METHOD'] whether it is post or get. if ($this->serverRequestMethod === 'POST' && $this->clientPostMethod != null) { $this->processPost(); } else if($this->serverRequestMethod === 'GET' && $this->clientRequestMethod != null) { $this->processRequest(); } } 

    У меня была та же проблема, когда он работал на моей локальной машине (OSX Mavericks, PHP версии 5.4.24), а не на моем реальном сервере (Cent OS 5). Я обновил сервер с 5.3.9 до 5.5.15 (и добавил функции mb и mcrypt, хотя это, вероятно, не имеет значения), и теперь это работает.

    Вероятно, это не полезно, если вы используете общий хост, но можете спросить их, могут ли они пересоздать PHP / Apache.

    Поэтому проблема / ошибка:

    filter_input () не работает с INPUT_SERVER или INPUT_ENV, когда вы используете FASTCGI

    Эта ошибка известна годами, и я не нашел ничего, что говорилось бы об этом. Я нашел несколько обходов, но не имел полного решения, поэтому я применил наилучшую работу в этой вспомогательной функции для решения по всему проекту. Чтобы обеспечить некоторый уровень безопасности и избежать обломков поездов, функция возвращается к filter_var (), где filter_input () терпит неудачу. Он использует тот же формат, что и встроенная функция filter_input () для легкой интеграции в проекты и простого удаления в будущем, если ошибка будет исправлена.

     function filter_input_fix ($type, $variable_name, $filter = FILTER_DEFAULT, $options = NULL ) { $checkTypes =[ INPUT_GET, INPUT_POST, INPUT_COOKIE ]; if ($options === NULL) { // No idea if this should be here or not // Maybe someone could let me know if this should be removed? $options = FILTER_NULL_ON_FAILURE; } if (in_array($type, $checkTypes) || filter_has_var($type, $variable_name)) { return filter_input($type, $variable_name, $filter, $options); } else if ($type == INPUT_SERVER && isset($_SERVER[$variable_name])) { return filter_var($_SERVER[$variable_name], $filter, $options); } else if ($type == INPUT_ENV && isset($_ENV[$variable_name])) { return filter_var($_ENV[$variable_name], $filter, $options); } else { return NULL; } } 

    Это кажется лучшим решением. Пожалуйста, дайте мне знать, если он содержит ошибки, которые могут вызвать проблемы.

    У меня была такая же проблема и на моем локальном хосте XAMPP, и безумно искал решения. То, что я закончил, это известная ошибка PHP для этой функции, если вы используете PHP в режиме FCGI (FCGI / PHP 5.4 в моем случае). Я был подтвержден через эту ссылку.

    Обходной путь, который я использовал, – filter_var($_SERVER['PHP_AUTH_USER'], FILTER_SANITIZE_STRING) но это не является альтернативой filter_input . filter_input более безопасен.

    FastCGI, похоже, вызывает странные побочные эффекты с неожиданными нулевыми значениями при использовании INPUT_SERVER и INPUT_ENV с этой функцией. Вы можете использовать этот код, чтобы узнать, влияет ли он на ваш сервер.

    Если вы хотите быть в безопасности, всегда будут работать суперглобальные переменные $ _SERVER и $ ENV. Вы все равно можете использовать функции фильтра * для Get / Post / Cookie без проблем, что является важной частью!

    Источник: http://php.net/manual/es/function.filter-input.php#77307

    Я решаю это, изменяя свой php.ini :

     variables_order = "GPCS" 

    Для того, чтобы:

     variables_order = "GPCSE" 

    По умолчанию PHP не регистрировал переменные среды, поэтому это изменение позволило им. Интересно, что переменные INPUT_SERVER вернулись к работе!

    Только две вспомогательные данные, я использую PHP 7.0.13, и, как сказано в других ответах, эта проблема связана с ошибкой PHP .

    Другой вариант заключается в следующем:

     filter_var(getenv('REQUEST_METHOD'));