В этом разделе мы рассмотрим только три параметра файла конфигурации PHP.INI
Но, именно эти параметры влияют в большей степени на работе скриптов:
register_globals = On
magic_quotes_gpc = Off
magic_quotes_sybase = Off
Что делают эти параметры? Первый параметр 'register_globals' разрешает или не разрешает регистрацию переменных сценария - как глобальных, доступных везде. Второй параметр 'magic_quotes_gpc' разрешает или запрещает использования слеша (\) перед кавычками и самим слэшем в переменных. Третий параметр 'magic_quotes_sybase' разрешает или запрещает использования кавычек перед самими кавычками в переменных, то есть может удваивать их. Обычно, на сервере в Php.ini эти параметры записаны так как Вы видели выше.
Но что делать, если, например параметр 'register_globals = Off', то есть отключена регистрация всех переменных в качестве глобальных, что рекомендуется делать в качестве безопасности самого сервера. Тогда все переменные мы можем достать через Глобальные массивы:
$_GET - массив, в котором будут прописаны все переменные из командной строки броузера.
$_POST - массив переменных, которые сценарий будет получать из форм.
$_COOKIE - массив переменных, которые сценарий будет с компьютера пользователя..
То есть, тогда если 'register_globals = Off' сценарий надо начинать строками:
<?php
if ( @ini_get ('register_globals')==0){$register_glob='off';}
if ($register_glob=='off'){
if ( isset ($_GET)) { foreach ( $_GET as $key => $value ) {$$key=$value;}}
if ( isset ($_POST)) { foreach ( $_POST as $key => $value ) {$$key=$value;}}
if ( isset ($_COOKIE)) { foreach ( $_COOKIE as $key => $value ) {$$key=$value;}}
}
?>
Сначала мы проверили функцией 'ini_get', что 'register_globals = Off', а затем пробежали по всем, ранее описанным массивам и вытащили все нужные нам переменные.
Если 'magic_quotes_gpc = On', то перед всеми кавычками, ставятся слеши. Например, если в форму Вы введете:
"\"\'\'
то при передаче сценарию эта строка преобразуется:
\"\\\"\\\'\\\'
то есть совсем не, то что мы хотели получить.
Если 'magic_quotes_gpc = On' и 'magic_quotes_sybase = On', то пробразование будет таким:
""\""\''\''
Чтобы убрать все эти проблемы, рекомендуем, сначала проверить как включены данные перечисленные параметры на сервере, а потом принимать решение, по выводу их в сценарий php. Тогда каждый Ваш php файл начинайте со строк:
<?php
// функция, которая проверяет настройки php.ini
function magic($path){
if ( @ini_get ('magic_quotes_sybase')=='1'){
$path = str_replace ('""','"',$path);
$path = str_replace ("''","'",$path);
}
else {
if ( @get_magic_quotes_gpc ()=='1'){
$path = str_replace ('\\"','"',$path);
$path = str_replace ("\\'","'",$path);
$path = str_replace ("\\\\","\\",$path);
}
}
return $path;
}
// вытащим в программу все переменные с учетом настроек php.ini
if ( isset ($_GET)) { foreach ($_GET as $key=>$val) {$$key=magic($val);}}
if ( isset ($_POST)) { foreach ($_POST as $key=>$val) {$$key=magic($val);}}
if ( isset ($_COOKIE)){ foreach ($_COOKIE as $key=>$val) {$$key=magic($val);}}
?>
В данном сценарии учтены все оговоренные выше настройки php.ini на сервере.
Если Вы будете начинать ваши php файлы с этих строчек, то Вам не страшны те проблемы, которые указывались в самом начале этой странички.