Почему значение INPUT_ENV равно null?

Почему при использовании filter_input(INPUT_ENV, 'TEST'') возвращается значение null?
  • 24 марта 2025 г. 7:05
Ответы на вопрос 3
`INPUT_ENV` в PHP используется для доступа к переменным окружения, однако на самом деле PHP не поддерживает `INPUT_ENV` как источник данных, подобно `INPUT_GET`, `INPUT_POST` и `INPUT_COOKIE`. Это значит, что `filter_input(INPUT_ENV, 'TEST')` всегда будет возвращать `null`, если вы не используете другие механизмы для установки значений переменных окружения.

### Возможные причины:

1. **Неправильный источник**: Как уже упоминалось, переменные окружения в PHP обычно доступны через `$_ENV` или функцию `getenv()`, а не через `filter_input()`.

2. **Переменные окружения не установлены**: Если переменная окружения `TEST` не установлена в вашей серверной среде, то `filter_input(INPUT_ENV, 'TEST')` вернет `null`, даже если бы он был поддерживаемым.

3. **Отсутствие поддержки**: Убедитесь, что ваш сервер настроен на поддержку переменных окружения и что переменная действительно существует.

### Решение:
Если вы хотите получить доступ к переменной окружения, попробуйте использовать один из следующих способов:

1. **Использование `getenv()`**:
   ```php
   $test_value = getenv('TEST');
   ```

2. **Использование `$_ENV`**:
   ```php
   $test_value = $_ENV['TEST'] ?? null; // Использует оператор null-совместимого объединения
   ```

Проверьте, есть ли значение переменной `TEST` в окружении перед её использованием.
Чтобы filter_input заработал вместе с INPUT_ENV, нужно в php.ini опцию <code>variables_order</code> добавить букву <code>E</code> <br/> <br/> Советую вместо filter_input брать данные из суперглобального массива <code>$_ENV</code> , а затем фильтровать через filter_var, так как у filter_input есть баг, что не во всех окружениях он работает корректно и всё равно возвращает null. Плюс поведение не соответствует документации - функция возвращает null для несуществующих переменных, хотя согласно документации должна возвращать false.
А не читали предупреждение про INPUT_* в описании параметров <code>filter_input()</code> , не? <br/> <a href="https://www.php.net/manual/ru/function.filter-input.php" rel="nofollow">https://www.php.net/manual/ru/function.filter-input.php</a>
Похожие вопросы