PHP предоставляет две волшебные справочные функции Magic_quotes_gpc и Magic_quotes_runtime, которые позволяют нам заключать данные в кавычки. Если для этих двух функций в php.ini установлено значение ON, они будут использовать одинарные кавычки, двойные кавычки и обратную косую черту для данных, которые мы цитируем. строка автоматически добавляется с обратной косой чертой, чтобы помочь нам автоматически переводить символы и обеспечивать правильную работу с данными. Однако в разных версиях PHP или разных конфигурациях сервера некоторые Magic_quotes_gpc и Magic_quotes_runtime включены, а некоторые включены. . off, поэтому программа, которую мы пишем, должна соответствовать как включенным, так и выключенным условиям. В чем же разница между функциями Magic_quotes_gpc и Magic_quotes_runtime? См. следующее описание:
Область примененияMagic_quotes_gpc
: сервер веб-клиента;
Время действия: Запрос запускается, например, при запуске скрипта.
Magic_quotes_runtime
: данные, считанные из файла или результат выполнения exec(), или полученные из SQL-запроса;
Время действия: каждый раз, когда скрипт обращается к данным, сгенерированным в рабочем состоянии.
Таким образом, значение настройки Magic_quotes_gpc будет влиять на данные, полученные с помощью Get/Post/Cookies; значение настройки Magic_quotes_runtime будет влиять на данные, считанные из файла или данные, полученные из запроса к базе данных;
Пример:
<form action="" метод="post" >
STR:<input type="text" name="str">
<тип ввода="отправить">
</форма>
<?php
/* Заполняем форму: '" Эти символы, если Magic_quotes_gpc не включена, то они не экранируются обратными слешами*/
echo 'Теперь через POST передается следующее значение:' ,$_POST['str'], '<br />';
if (get_magic_quotes_gpc()) { // Проверяем, включен ли Magic_quotes_gpc. Если нет, используйте addslashes для преобразования. праведный
$str = $_POST['str'];
} еще {
$str = addslashes($_POST['str']);
}
echo 'Вот экранированная версия:' ,$str, '<hr />';
$sql = "ВСТАВИТЬ В Фамилии (фамилии) ЗНАЧЕНИЯ ('$str')"
//==========================
;= ============================================== = ======
//-----magic_quotes_gpc будет экранироваться только: данные www.devdao.com, полученные через Get/Post/Cookies
//-----magic_quotes_runtime будет экранирован: данные, прочитанные из файла или результат выполнения exec(), или полученные из SQL-запроса
//============================================== ====================================
$data = implode(file('try.php')); // Мы по-прежнему пишем в нем символы '" для тестирования
echo 'Вот данные try.php,';
если (get_magic_quotes_runtime()) {
$данные = $данные;
echo 'скрыто системой' .$data;
} еще {
echo 'экранировано с помощью addslashes' .$data = addslashes($data);
}
$sql = "ВСТАВИТЬ В Фамилии (фамилии) ЗНАЧЕНИЯ ('$data')";
echo '<br />SQL-оператор:<br />' ,$sql;
//---При входе в базу данных все экранируется, но есть лишние обратные слеши. Когда мы хотим прочитать исходные данные, используйте Stripslashes() для удаления обратных слэшей.
//---stripslashes() и addslashes() имеют противоположный эффект
?>Наиболее важным отличием являются два упомянутых выше момента: они предназначены для разных объектов обработки. Значение параметра Magic_quotes_gpc будет влиять на данные, полученные с помощью Get/Post/Cookies. Значение параметра Magic_quotes_runtime будет влиять на чтение данных из файла. полученные или данные, полученные из запроса к базе данных, упоминаются здесь следующим образом: set_magic_quotes_runtime(): установите значение magic_quotes_runtime. 0=off. 1=on. Состояние по умолчанию закрыто. Вы можете использовать echo phpinfo() ; Check Magic_quotes_runtimeget_magic_quotes_gpc( ): Проверьте значение Magic_quotes_gpc 0 = Закрыть 1 = Открыть get_magic_quotes_runtime (): Проверьте значение Magic_quotes_runtime. 0=выкл. 1=вкл. Обратите внимание, что функция set_magic_quotes_gpc() отсутствует, то есть значение Magic_quotes_gpc не может быть установлено в программе.