Потестировать портальную систему

mpak

Новичок
$conf['fs']['path'] переменная для того чтобы определить на каком хосте работает скрипт. В файловой системе две директории. Одна с основной системой другая та которую подулючаем. Создав в ней любой файл мы заменим им такой же файл в основной системе.

Агент верно не заметил. Поправил уже. А проверять функцию для того что возможны ситуации когда она будет обьявляться дважды. Например если скопировать index.php из основной системы в хост. Запрос придет на осноной и будет передан вашему. В этом случае функция дважды обьявляется и без проверки никак.

-~{}~ 27.11.09 19:13:

Автор оригинала: zerkms
таких ситуаций быть не должно быть. файлы с функциями должны включаться единожды. а разные функции должны быть названы по-разному. хочется полиморфности - читай об ООП.
У меня хост каждый работает всего с двумя файлами. конфигом и папкой для файлов. Но с двумя директориями. В первой всегда основная система во второй папка хоста с двумя файлами. Я сделал так что если хочешь заменить разрату какого то файла на свой в отдельном домене кидаешь его копию измененную в хост домена и работает уже не основной файл а его копия в домене. Также и с движком. К примеру я переделываю что то в движке мне остается создать пустую директорию и бросить туда index.php Тогда основной движок отдаст испольнение его копии на третей строчке. Я на единственом хосте буду работать со своей версией движка. А остальными использовать файлы основной системы. Остальные работаю с основным движком. Если у них нет index.php в корне их хоста. Также и с любый файлом. Делаем пустую директорю и кидаем туда один измененный модуль. В итоге получаем рабочий сайт с одним измененным блоком. Так счас на демо сделано. Там в блок авторизации явно вписан логин пароль. Остальные файлы с основной системы.
 

zerkms

TDD infected
Команда форума
Агент верно не заметил. Поправил уже. А проверять функцию для того что возможны ситуации когда она будет обьявляться дважды. Например если скопировать index.php из основной системы в хост. Запрос придет на осноной и будет передан вашему. В этом случае функция дважды обьявляется и без проверки никак.
вынеси функции в отдельные файлы. пусть люди правят твои файлы.
если не хочется этого - почитай о том, как это решается в нормальных продуктах. (например: резолверы, наследование, ...)

Ну и ты так и не ответил про @. Какая ошибка может возникнуть? В коде @ понатыканы абсолютно бездумно.
Не нужно подавлять ошибки - нужно писать код без ошибок.

Свободен :)
 

mpak

Новичок
Может быть не создано базы данных во время работы. При чем здесь код.
Так как хосты создаются динамически может возможно что что то не так пойдет и база данных не будет создана. Ни один символ я буздумно не ставил. Весь код написан мной. И добавлялся только при необходимости.
 

zerkms

TDD infected
Команда форума
mpak
и какая ошибка будет выкинута в поток тогда?
приведи полный текст.

к сведению - warning это не ошибка. на warning можно повешать свой обработчик, который будет рисовать красивое сообщение.
 

mpak

Новичок
Счас не могу сказать что выпадет тогда но мне эта ошибка не нужна. Поэтому там и стоит собака.
 

iamFake

Mind Of Liberty
никто из адекватных программистов\администраторов\руководителей проектов твою систему использовать не будет... качество кода - никуда не годиться, объективную критику ты отвергаешь...
 

mpak

Новичок
Проблема не в ошибках которые там есть. Они всегда были и будут. Я их не отвергаю. Я до вас другое хочу донести.

История портальной системы началась как обычно с папки в которой располагались файлы библиотек, модули, конфигурационные файлы и скрипт установки. В таком состоянии система развивалась какое то время. При установке нескольких сайтов на сервер делалась копия файловой файловой системы для каждого сайта. Регулярно возникала ситуация когда нужно было вносить изменения в код системы. Чтобы системы не различались меду собой и работали с один алгоритмом приходилось копировать файлы с измененным содержимым в папку каждого хоста. Когда количество хостов перевалило за несколько десятков а количество изменений вносимых в код стало частым процесс копирования файлов в каждый из хостов стал напрягать. Особенно сложно было с сайтами хнанящимися на других серверах. Каждый раз при замене части кода козникла другая задача изменения структуры базы данных в соответсвии с новой версией скриптов. Получалось что со временем версии сайтов расходились в разные стороны. Оставаясь одной системой каждый хост не был точной копией друг друга, различаясь в деталях каждый из них работал по своему. При этом возникала задача другого характера. Так как каждый хост имел свои незначительные особенности копирование файлов с обновленным кодом вызывало разные реакции в системе. В одной из них можно было исправить дело небольшими измененийми, другие отличались серьезнее и новые изменения к ним просто не подходили. В этот момент передо мной встали две задачи. Первая - создать механизм который обеспечивал применение сделанных изменений ко всем проектам одновременно, сколько бы их не было. То есть если даже тысяча хостов будет находится на сервере применив изменения к одному файлу мы должны поиметь тот же код для всех других копий портальной системы. Задача вторая - обеспечить применение изменений к каждому из хостов так чтобы внесение изменений в дальнейшем не влияло на отличные от базовой системы части. Это мог быть сайт с уникальным модулем. Внесенные один раз изменения в какой то модуль не должны изменяться в дальнейшем. Хотя изменения в других модулях все также должны быть доступны. Через каоке то время я нашел решение данной задачи. Основная идея заключалась в применении в качестве домашней папки со скриптами двух директорий. Одна из них содержим всегда самую последнюю версию портальной системы. Эта папка не доступна для записи серверу является единственной для всех сайтов. Вторая уникальная для каждого хоста и содержит только изменения отличные от базовой системы. Веб сервер апач в качестве папки из которой будут запускатья скрипты настроен на основную систему. Запускается на все сайты один файл. Но механизм таков что при запуске каждого файла он проверяет присутствие в директории хоста файлов отличных от базовой. Если такой файл найден система выполняет файл не из базовой а из диретории хоста. В самом простом варианте папка хоста для сайта пуста. Этип обеспечивается работа сайта с базовыми скриптами. В случае необходимости иметь отличный от основного участок кода мы ложим в папку хоста файл с измененным кодом. Система при запуске файла системы использует файл находящийся в директории хоста. Тем самым была решена пробема обновления и уникальности части кода. При изменении кода в основной директории он был доступен всем хостам. При копировании какогото файла из основной директории в директорию хоста этот код как бы замораживался и дальнейшие изменения данного файла уже небыли доступны на данном сайте. А теперь покажу несколько ситуаций и их решение в системе.

Задача: написать уникальный блок для одного из сайтов.
Решение: в директории хоста создается директория в которой хранятся блоки /include/blocks/мойблок.php. В его код вносится нужный код.
Результат: Мы имеем блок который виден только в списке хоста в директории которого он создан. Для других сайтов этот блок не досупен.

Задача: Переделать чать кода уже существующего в системе.
Решение: Копируем нужный блок в директрию с сайтом. Испрвляем часть кода в соответствии с задачей.
Результат: Данный блок виден как в основной системе, так и на сайте в котором мы его изменили. Но работают они по разному. Для всех сайтов работает код блока основной директоии системы. Для сайта работае код находящийся в файле блока в директории сайта. Все дальнейшие изменения данного блока системы не повлияют на блок на данном сайте.

Задача: Поменять код движка системы не прерывая работы всех сайтов.
Решение: Создается новая папка для хоста на котором будем проводить изменения. В корень копируется файл движка системы. index.php. Движок сделан так что в первых строках проверяет существование движка в директории сайта. Если в папке есть файл движка то система передает на него управление прекращая дальнейшую работу. Так как эти копии движка системы используют одни файлы то становится возможным изменение кода движка в рамках одного хоста. После внесения нужных изменений и тестирования кода файл движка копируется обратно в основную систему.
Результат. Можно менять файлы не только частей системы но и самого движка в целом. При копировании важно было сделать чтобы файл как корректно передавал управление сам так и продолжал корректно работать после передачи на себя же управление. Поэтому в движке системы есть некоторые особенности. Так производится проверка на существование функций обьявляемых в движке. Это связано сработой предпроцессора. Перед началом испольнения кода файла пхп проходит по его коду и обьявляет функции. Поэтому функции получаются обьявленными в случае если управление не доходит до его обьявления.

Таким образом я могу сделать вывод. Что наибольшую ценность в данной системе представляет не код, любая часть которого может быть изменена. Не движок который реализует возможности системы, а сам подход к разработке. Появляется возможность запустить десяток или может даже тысячи сайтов на одной копии файловой системы портальной системы. Обеспечить фиксацию изменений кода для одного сайта и разработку отдельный частей и модулей без риска получить ошибки на всей системе сайтов.

На сайте я реализовал подобную систему. На одной из страниц сайта можно получить доступ по фтп протоколу к файловой системе зарегистрированного хоста. Очень просто менять любую часть кода системы или движок в целом.
 

zerkms

TDD infected
Команда форума
Таким образом я могу сделать вывод. Что наибольшую ценность в данной системе представляет не код, любая часть которого может быть изменена. Не движок который реализует возможности системы, а сам подход к разработке.
ты не поверишь, но ты ничего нового не изобрёл.
ты переизобрёл уже известные подходы, причём наиболее кривым способом.

Появляется возможность запустить десяток или может даже тысячи сайтов на одной копии файловой системы портальной системы.
удивительное рядом.
 

Духовность™

Продвинутый новичок
Я так понимаю, это ФУНКЦИЯ?! - http://phpclub.ru/paste/index.php?show=2380

Я бы убился такую функцию разбирать

-~{}~ 28.11.09 12:33:

Код - типичная лапша. Куча ветвлений. Шаблонизацией и не пахнет. Поддерживать его нереально будет. Лично я испугался бы и убежал.
 

Beavis

Banned
когда приходится работать с такой лапшой прям руки хочется оторвать человеку который её писал...
 

mpak

Новичок
Вся система может работать без этой функции. Она облегчает некоторые действия. Не обязательно вообще ее использовать. Если есть желание любой может написать свою с подобным функционалом. Как я говорил я на чистоту и оптимальность кода не претендую. Показал именно свой подход к размещению хостов и логику их работы.

-~{}~ 28.11.09 12:58:

Создайте в директории своего хоста файл /include/func.php с содержимым
<? die;

?>

И вы избаветесь от всего этого. В системе не станет содержимого этого файла.

-~{}~ 28.11.09 12:59:

Или если есть желание и умение написать свою.

<? die;
function stable($table){
echo "myfunc";
}
?>

Хотел бы я посмотреть как это получится у Вас :)
 

AmdY

Пью пиво
Команда форума
я бы это сделал
set_include_path('/var/www/site1.ru/' . PATH_SEPARATOR . '/var/www/core/');
......
include_once 'module/test.php';

просто если программировать учиться не по книжке "PHP глазами хацкера", то с архитектурой таких траблов бы не было.
 

Духовность™

Продвинутый новичок
хочется оторвать человеку который её писал...
не надо так категорично.

Вся система может работать без этой функции.
да причем тут система? я говорю о том, что функция в 500 строк кода - это очень не правильно. Функция не должна быть более 20-30 строк.

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

AmdY

Пью пиво
Команда форума
обидно убив туеву кучу на свой мегопроект и показав его людям услышать: боян, такое уже есть, так писать нельзя, спасёт только бульдозер.
А чтобы не попадать в подобную ситуацию, нужно было обращаться к комьюнити намного раньше. Времени в итоге бы потратил бы столько же, но на выходе был шанс получить код гораздо лучшего качества, гибче ........
 

pilot911

Новичок
нужно развивать проект - услышать аргументы людей в этой ветке и переписать код


еще лучше, устроиться в компанию, где есть highload проекты и годик поработать там, параллельно исправляя свой код
 

mpak

Новичок
По поводу баяна. Скажите кто знает где используется подобная схема?
 

zerkms

TDD infected
Команда форума
kohana, CI, limb, mzz - изкоробки
на zend framework естественно похожая схема без костылей (как у тебя) делается легко и непринуждённо.
так или иначе - я уже давно сказал, что если тебе хочется полиморфности, то нужно почитать об ООП и наследовании.

ps: от темы отписываюсь - обсуждать тут нечего.
 

AmdY

Пью пиво
Команда форума
mpak
у меня во фреймворке в зависимости от хоста подключается свой конфиг и есть либы фреймворка и либы текущего проекта, в автолодере сразу проверяется существование в текущем проекте, а затем общие.

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

из известных - seagullproject.org, там всё так же может (могло) работать на одном ядре.
 
Сверху