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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: LDAP на PHP+MySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
nkl
Отправлено: 30 Мая, 2012 - 20:23:29
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Я, по большей части теоретик в программировании, поэтому обращаюсь за помощью к практикам...
Господа, кто знает что такое LDAP (кто не знает, идите в wiki), тот должен понять, чего я хочу добиться. В общем, задумал я написать аналог LDAP на связке PHP+MySQL. Только это не простой LDAP. В общем, я хочу создать штуку, которая могла бы генерировать бесконечно-ветвящееся дерево HTML-страниц, содержимое которых хранилось бы в БД, причем это содержимое, можно было бы выполнять.
Как в оснастке администрирования Windows в общем. Аналог AD, только на php и mysql.
Вот картинка:

Только что б в правой части могла располагаться, как ссылка на еще более глубокий уровень, либо ссылка на какое либо приложение (форма добавления инфы, например).
Уже есть некоторые наработки класса, правда они без комментариев, но все же покажу:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class Page{
  4.         private $page;
  5.         private $body;
  6.         private $pageid;
  7.         private $error_num = 777;
  8.         private $query, $num_rows, $result, $i;
  9.        
  10.         public function __construct($pageid){
  11.                 $this->pageid = $pageid;
  12.                 $this->query = "SELECT * FROM `page`";
  13.                 $this->result = mysql_query($this->query);
  14.                 if (is_resource($this->result)){
  15.                         $this->num_rows = mysql_num_rows($this->result);
  16.                         for($this->i = 0; $this->i < $this->num_rows; $this->i++){
  17.                                 $this->page[$this->i] = mysql_fetch_assoc($this->result);
  18.                         }              
  19.                 }
  20.                 else{
  21.                         $this->error_num = 1;
  22.                         exit;
  23.                 }
  24.                        
  25.         }
  26.        
  27.         public function setTitle(){
  28.                 print $this->page[$this->pageid]['title'];     
  29.         }
  30.         /*
  31.         public function setHead(){
  32.                 print $this->page[$this->pageid]['head'];
  33.         }
  34.         */
  35.         public function setBody(){
  36.                 print $this->page[$this->pageid]['body'];
  37.         }
  38.        
  39.         public function setMenu(){
  40.                 echo '<ul>';
  41.                 for ($this->i = 0; $this->i < $this->num_rows; $this->i++){
  42.                         echo '<li><a href="'.$_SERVER['SCRIPT_NAME'].'?pageid='.$this->page[$this->i]['id'].'">'.$this->page[$this->i]['title'].'</a>';
  43.                 }
  44.                 echo '</ul>';
  45.         }
  46. }
  47. ?>
  48.  

А вот страница использующая этот класс
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. ini_set('display_errors',1);
  4. error_reporting(E_ALL);
  5.  
  6. $DB['host'] = '******';
  7. $DB['user'] = '******';
  8. $DB['pass'] = '******';
  9. $DB['name'] = '*****';
  10.  
  11. require_once('classes/class.printer.php');
  12. require_once('classes/class.page.php');
  13. $db = @mysql_connect($DB['host'], $DB['user'], $DB['pass']);
  14. mysql_query("SET NAMES utf8");
  15. if (!$db){exit ("<P>Ошибка при попытке соединения с базой данных</P>");}
  16. if (!@mysql_select_db($DB['name'], $db)){exit( "<P>В подключенной базе данных не удается найти требуемую базу, проверьте файл конфигурации</P>" );}
  17.  
  18. if (!isset($_GET['pageid'])){
  19.         $objPage = new Page(0);
  20. }
  21. else{
  22.         $objPage = new Page($_GET['pageid']-1);
  23. }
  24. ?>
  25. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  26. <html xmlns="http://www.w3.org/1999/xhtml">
  27. <head>
  28. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  29. <title>Документ без названия</title>
  30. </head>
  31.  
  32. <body>
  33.  
  34. <table style="background: black;" width="960px" border="0" align="center">
  35.   <tr style="background: white;">
  36.     <td width="200px" valign="top">
  37.     <?php
  38.         $objPage->setMenu();
  39.         ?>
  40.     </td>
  41.     <td valign="top">
  42.     <?php
  43.         $objPage->setTitle();
  44.         echo '<br/>';
  45.         $objPage->setBody();
  46.         ?>
  47.     </td>
  48.   </tr>
  49.   <tr style="background: white;">
  50.     <td colspan="2">
  51.     <?php
  52.         echo $_GET['pageid'];
  53.         ?>
  54.     </td>
  55.   </tr>
  56. </table>
  57.  
  58. </body>
  59. </html>
  60.  

(Добавление)
Получается весь скрипт сайта состоит из нескольких файлов инициализации базы данных, которая-то уже и содержит код всех остальных функций системы. Причем не важно какая это система, этот шаблон построения можно применять к приложения любой сложности. А если к этому еще добавить и ACL (Access Control List), по русски говоря, запись для каждого объекта этого каталога, которая бы разъясняла, кто и какие права имеет на этот объект, то это было бы вообще шедеврально! Более подробно можно почитать у меня в блоге. nkl.su
(Добавление)
Приведенный код может создавать только одноуровневый каталог.
 
 Top
Мелкий Супермодератор
Отправлено: 30 Мая, 2012 - 20:50:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




У меня один вопрос - и что? Простейший показыватель записей из базы.

И почему методы set* вообще выводят данные?


-----
PostgreSQL DBA
 
 Top
nkl
Отправлено: 30 Мая, 2012 - 21:08:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Я не говорю что это какое-то революционное изобретение. Если вы способны уложить эту древовидную структуру в реляционную базу, то милости прошу, изложите... В моей голове это не укладывается.
(Добавление)
Мелкий пишет:
И почему методы set* вообще выводят данные?

Не сразу понял о чем вы. В следующей версии будет get)
 
 Top
Мелкий Супермодератор
Отправлено: 30 Мая, 2012 - 21:45:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




nkl пишет:
Если вы способны уложить эту древовидную структуру в реляционную базу, то милости прошу, изложите...

Где здесь древовидная структура?

Используйте классический Adjacency List. Nested Sets здесь может быть так же уместен, если допустимо снижение скорости редактирования структуры на приличных объёмах дерева.
Не менее классический Materialized Path не подойдёт, т.к. имеет ограничение на глубину.

Не ищите в моих словах никакого подтекста, я правда не понимаю "и что дальше?". Вижу глобальную хотелку, вижу некий код. А никаких вопросов, просьб советов, "наработок по собственным проектам" - ничего не вижу.

nkl пишет:
В следующей версии будет get)

Почему get, если print?


-----
PostgreSQL DBA
 
 Top
nkl
Отправлено: 30 Мая, 2012 - 22:05:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Цитата:
Где здесь древовидная структура?

Файлы, вложенные в папки, а те в другие папки - вот древовидная структура
Цитата:
Если вы способны уложить эту древовидную структуру в реляционную базу, то милости прошу, изложите...

Как бэ объяснить... Откройте хотя бы оснастку regedit. Грубо говоря, он состоит из папок и файлов вложенных друг в друга. Я хочу тоже самое, только что бы html страница могла быть как "файлом", так и "папкой" в этом каталоге.
Возьмем пример по-проще. Откройте php-manual в chm формате. Он сосотоит из разделов и подразделов и по-большому счету, ничто не ограничивает глубину этого каталога.
Цитата:
я правда не понимаю "и что дальше?"

Видимо Вы не системный администратор, windows. Этот активный каталог может содержать, к примеру, пошаговый мастер добавления записи в БД, либо скрипт выводящий таблицу. При помощи mmc, в windows к примеру можно рулить практический всей системой. В чем собственно, ИМХО и заключается успех этих операционных систем. Легко освоить, и принцип един для большинства типичных действий.

Вообще, откуда пошли эти мысли. Было предложено переписать FreePBX из файлового варианта в SQL, причем не MySQL, а PostgeSQL в виду колоссального католичества пользователей. Т.е., что бы как можно большее кол-во файлов хранилось в базе данных, а из файлов читался только вот-такой вот "показыватель" этих скриптов. До завтра попробую изобразить схематично. Сегодня уже спать. Улыбка
 
 Top
caballero
Отправлено: 30 Мая, 2012 - 22:10:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
только что бы html страница могла быть как "файлом", так и "папкой" в этом каталоге.

HTML может быть либо HTML страницей либо динамически геренитmся на PHP. И при чем тут вообще HTML если речь судя по всему идет о древовидном представлениии неких данных.
(Добавление)
Цитата:
Было предложено переписать FreePBX из файлового варианта в SQL, причем не MySQL, а PostgeSQL в виду колоссального католичества пользователей.

И сколько у вас миллиардов пользователей что Mysql не потянет?
А если по теме- в чем проблемма собственно? Садись и пиши. Или заплати тому кто напишет. Вряд ли тут на пальцах кто то раскажет решение.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Мелкий Супермодератор
Отправлено: 31 Мая, 2012 - 08:51:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




nkl пишет:
Откройте хотя бы оснастку regedit.

Для этого винда нужна Подмигивание
И я знаю, что такое деревья и знаю плюсы и минусы всех 3 уже названных мной методов их размещения в реляционной СУБД.

nkl пишет:
Видимо Вы не системный администратор, windows. Этот активный каталог может содержать, к примеру, пошаговый мастер добавления записи в БД, либо скрипт выводящий таблицу.

Да, я - разработчик. Но я представляю, что такое LDAP, сталкивался как-то раз. Даже помню когда это было - тем же летом, когда на этом форме зарегистрировался.

Ещё раз - я прекрасно вижу в теме вашу глобальную затею. Но я не вижу ни одного вашего вопроса. Что я вижу:
"хочу сделать аналог LDAP"
"есть вот такой кусочек кода"
... ммм... Всё, больше ничего не вижу.


-----
PostgreSQL DBA
 
 Top
nkl
Отправлено: 31 Мая, 2012 - 13:49:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Мелкий пишет:
И я знаю, что такое деревья и знаю плюсы и минусы всех 3 уже названных мной методов их размещения в реляционной СУБД.

Я ознакомился с приведенными вами статьями, огромное спасибо за ценные статьи, очень многое прояснилось, сегодня попробую накрапать что нить после работы, быть может тогда для вас станет ясна моя глобальная затея.

Это, что-то вроде универсальной платформы для приложений. Из чего состоит php-сайт? Из набора php-файлов. Заказчик столкнулся с ситуацией, когда сайт (в частности это FreePBX, это даже не сайта, а web-gui приложения для работы call-центра под *nix) начинает жутко тормозить уже при нагрузке в 500-600 одновременных обращений. И была предложена идея переписать этот Dt,-Гуй из файлов в унифицированную sql-таблицу.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB