PHP

Php ini

В этом разделе мы рассмотрим только три параметра файла конфигурации 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 файлы с этих строчек, то Вам не страшны те проблемы, которые указывались в самом начале этой странички.
Теги:
ini
Добавлено: 02 Апреля 2018 20:51:35 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...