Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Приватное подключение к БД
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Приватное подключение к БД

Страниц (1): [1]
 

1. neolinux - 16 Декабря, 2013 - 08:59:26 - перейти к сообщению
Есть следующий скрипт
CODE (htmlphp):
скопировать код в буфер обмена
  1. /* Функции взаимодействия с системным массивом */
  2. /* setsys()
  3. Записывает данные в элемент системпого массива */
  4. function setsys($element, $data)
  5. {
  6.    GLOBAL $SYS_NW;
  7.    $el=explode('.',$element);
  8.    $i=count($el);
  9.    if($i==1)$SYS_NW[$element]=$data;
  10.    elseif($i==2)$SYS_NW[$el[0]][$el[1]]=$data;
  11.    elseif($i==3)$SYS_NW[$el[0]][$el[1]][$el[2]]=$data;
  12.    elseif($i==4)$SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]]=$data;
  13.    elseif($i==5)$SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]][$el[4]]=$data;
  14.    else return false;
  15.    return true;
  16. }
  17.  
  18. /* getsys()
  19. Возвращает значение элемента массива */
  20. function getsys($element)
  21. {
  22.    GLOBAL $SYS_NW;
  23.    $el=explode('.',$element);
  24.    $i=count($el);
  25.    if($i==1)return $SYS_NW[$element];
  26.    elseif($i==2)return $SYS_NW[$el[0]][$el[1]];
  27.    elseif($i==3)return $SYS_NW[$el[0]][$el[1]][$el[2]];
  28.    elseif($i==4)return $SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]];
  29.    elseif($i==5)return $SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]][$el[4]];
  30.    else return false;
  31. }
  32. function mysqlc_db_connect($server,$user,$password,$database)
  33.    {
  34.       setsys('app.mysql.other.server',mysql_connect($server, $user, $password)); // подключение к серверу
  35.       if(getsys('app.mysql.other.server'))
  36.       {
  37.          $dbselect=mysql_select_db($database); // активация БД
  38.          if(!$dbselect)
  39.          {
  40.             mysql_close(getsys('app.mysql.other.server'));
  41.             setsys('app.mysql.other.server','');
  42.             setsys('app.mysql.error',56);
  43.             return false;
  44.          }
  45.          else
  46.          {
  47.             setsys('app.mysql.other.dbselect',$database);
  48.             return true;
  49.          }
  50.       }
  51.       else
  52.       {
  53.          setsys('app.mysql.error',55);
  54.          return false;
  55.       }
  56.    }
  57.  
  58.  
  59.    /* закрывает соединение с базой данных */
  60.    function mysqlc_db_close()
  61.    {
  62.       getsys('app.mysql.other.server');
  63.       if(func_num_args()>0) return mysql_close(func_get_arg(0));
  64.       else return mysql_close(getsys('app.mysql.other.server'));
  65.    }
  66.  
  67.    /* отправляет запрос активной БД */
  68.    function mysqlc_query_db($query="")
  69.    {
  70.       setsys('app.mysql.result',mysql_query($query));
  71.  
  72.       if(getsys('app.mysql.result'))
  73.       {
  74.          return getsys('app.mysql.result');
  75.       }
  76.       else
  77.       {
  78.          setsys('app.mysql.error',57);
  79.          return false;
  80.       }
  81.    }

Еще не реализовал, но функции setsys() и getsys() будут запрещать доступ приложений к массиву, соответственно, сторонние скрипты не смогут получить параметры подключения. Но они смогут обращаться напрямую к активной БД.
Возможно ли запретить им такое действие? Или, как иначе можно скрыть от них подключение к БД?
2. DeepVarvar - 16 Декабря, 2013 - 12:01:00 - перейти к сообщению
neolinux пишет:
как иначе можно скрыть от них подключение к БД
Инкапсуляцией
3. DelphinPRO - 16 Декабря, 2013 - 12:07:28 - перейти к сообщению
Имеется ввиду что ваш скрипт будет использоваться как библиотека?

Использование БД никак не запретить. Всегда можно самому поключится, зная параметры доступа.
Запретить доступ к текущему подлючению, вероятно можно, реализовав синглтон
4. neolinux - 16 Декабря, 2013 - 13:57:09 - перейти к сообщению
DelphinPRO пишет:
Имеется ввиду что ваш скрипт будет использоваться как библиотека?

Да.
DelphinPRO пишет:
Всегда можно самому поключится, зная параметры доступа

Сторонние скрипты не смогут получить параметров подключения
DeepVarvar пишет:
Инкапсуляцией
и
DelphinPRO пишет:
Запретить доступ к текущему подлючению, вероятно можно, реализовав синглтон

Здесь можно чуть подробнее. Хотя бы - куда копать?
(Добавление)
DeepVarvar
У меня уже возникала неприятная ситуация из-за отсутствия отображения значка модератора в IE8 (на заметку)
5. Toxa - 16 Декабря, 2013 - 14:18:41 - перейти к сообщению
инкапсуляция и синглтон - это термины ООП, на эту тему есть сотни статей в интернете.
В двух словах на форуме вам никто не объяснит.
6. esterio - 16 Декабря, 2013 - 14:39:22 - перейти к сообщению
neolinux пишет:
GLOBAL $SYS_NW;

Уже только по этому такое не получиться сделать. А учитивая предидущие топикы ТС, он не хочет использовать ООП. Так что думаю никак. Еще в добавок скажу, что в mysql_* последний коннект активный и если не передать явно коннект в функции mysql_*, то будет использован активный коннект. в данном случае:
neolinux пишет:
setsys('app.mysql.other.server',mysql_connect($server, $user, $password));


Также хочу предупредить ТС, о том что нужно проверять на isset елементы массива
neolinux пишет:
if($i==1)$SYS_NW[$element]=$data;
elseif($i==2)$SYS_NW[$el[0]][$el[1]]=$data;
elseif($i==3)$SYS_NW[$el[0]][$el[1]][$el[2]]=$data;
elseif($i==4)$SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]]=$data;
elseif($i==5)$SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]][$el[4]]=$data;


Инакше можно схопить ошыбку undefined offset
7. neolinux - 16 Декабря, 2013 - 21:00:09 - перейти к сообщению
esterio пишет:
А учитивая предидущие топикы ТС, он не хочет использовать ООП

Как это реализовать на ООП?
8. caballero - 16 Декабря, 2013 - 21:06:39 - перейти к сообщению
при чем тут вообще ООП? никакое ООп не помешает скрипту вызвать mysql_query и обратится к БД
9. esterio - 17 Декабря, 2013 - 00:20:43 - перейти к сообщению
инкапсуляция + mysqli или pdo
10. neolinux - 17 Декабря, 2013 - 14:40:12 - перейти к сообщению
caballero пишет:
никакое ООп не помешает скрипту вызвать mysql_query и обратится к БД

Я тоже так считаю
была мысль: в самой программе удалить код подключения к БД. Перед передачей ей управления выполнить mysqlc_db_connect() (см. в начале), по возврату - mysqlc_db_close(). Это бы свело к минимуму изменения в самой программе. Но если одна БД на сайт, нужно контролировать в какую таблицу лезет скрипт, а менять все mysqlc_query() на mysqlc_query_db - это уже мутатень.
(Добавление)
Может парсер PHP какой существует? Чтобы скрипты ставить не копированием, а через инсталятор. Заотно и include() заменить.
11. caballero - 17 Декабря, 2013 - 15:05:22 - перейти к сообщению
мутотень - твоя идея о чем тебе давно пытались втолковать.

Но как говорится ничто так не примиряет с реальностью как сама реальность
12. DelphinPRO - 17 Декабря, 2013 - 15:47:52 - перейти к сообщению
neolinux пишет:
нужно контролировать в какую таблицу лезет скрипт, а менять все mysqlc_query() на mysqlc_query_db - это уже мутатень.

facepalm.jpg
Откуда такая паранойя? Зачем такой контроль? В каких библиотеках\фреймворках вы такое видели?
13. neolinux - 17 Декабря, 2013 - 16:09:36 - перейти к сообщению
caballero пишет:
мутотень - твоя идея

Откуда такое стремление к оскорблениям?
И это те люди, что образуют контент форума!!!!
(Добавление)
DelphinPRO пишет:
Откуда такая паранойя?

Не скажу, заплюют
14. caballero - 17 Декабря, 2013 - 16:49:15 - перейти к сообщению
Цитата:
Откуда такое стремление к оскорблениям?

это не оскорблене а констатация факта. Темы, подобные этой , только потверждают очевидное.

 

Powered by ExBB FM 1.0 RC1