Возьмите этот код:
<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
}
if ($action) {
echo $action;
}
else {
echo 'No variable';
}
?>
Затем откройте файл с помощью? Action = test. Есть ли способ предотвратить автоматическое объявление $ action с помощью GET? Кроме, конечно, добавления
&& !isset($_GET['action'])
Зачем мне объявлять переменную за меня?






Проверьте свой php.ini для настройки register_globals. Вероятно, он включен, вы хотите его выключить.
Why would I want the variable to be declared for me?
Вы этого не сделаете. Это ужасная угроза безопасности. Он делает переменные Environment, GET, POST, Cookie и Server глобальными (Руководство по PHP). Это несколько зарезервированные переменные в PHP.
Я написал немного больше в ответе выше - это влияет на среду, получение, публикацию, cookie и сервер.
Похоже, виноват register_globals в вашем php.ini. Вы должны выключить это. Это также огромный риск для безопасности.
Если вы используете общий хостинг и не можете изменять php.ini, вы можете использовать ini_set (), чтобы отключить register_globals.
Отключите register_globals, если я понимаю ваш вопрос. См. http://us2.php.net/manual/en/language.variables.predefined.php
Вы можете проверить, все ли переменные объявлены правильно, установив уровень журнала PHP в PHP.INI на
error_reporting = E_ALL
Теперь ваш фрагмент кода должен сгенерировать УВЕДОМЛЕНИЕ.
В какой-то момент истории php они приняли неоднозначное решение отключить register_globals по умолчанию, поскольку это представляло огромную угрозу безопасности. Это дает любому возможность вводить переменные в ваш код, что приводит к немыслимым последствиям! Эта "функция" даже удалена в php6.
Если вы заметили, что он включен, обратитесь к администратору, чтобы выключить его.
если у вас нет доступа к php.ini, ini_set('register_globals', false) в скрипте php не будет работать (переменные уже объявлены)
.htaccess с:
php_flag register_globals Off
иногда может помочь.
Спасибо за ответ, это действительно то, что я искал. Но является ли мой пример единственным, на что влияет register_globals?