PHP Compiler CMF

Статус
В этой теме нельзя размещать новые ответы.

Dagdamor

Новичок
PHP Compiler CMF

Небольшой движок, разработкой которого я занимаюсь уже лет 5. Предлагаю вашему вниманию, надеюсь на вразумительные отзывы, может быть даже на сотрудничество :) движок достаточно простой, и в устройстве, и в использовании. Что-то типа фреймворка, т.е. это не CMS.

Сразу о минусах:

- Пишу я его для собственного удовольствия, что-то типа хобби, поэтому все двигается медленно...
- Офсайт появился совсем недавно и состоит из 2 страниц.
- Документация в зачаточном состоянии.
- Стиль написания кода, мягко говоря, отличается от PEAR.
- Комментарии в коде отсутствуют как явление. Еще одна дурацкая привычка.

Офсайт движка
Ссылка на последнюю версию (2.4.5)
Ссылка на документацию
Пример сайта (на инглише)
Скриншоты админки (этого же сайта)
 

HraKK

Мудак
Команда форума
Как увидел венегрет - дальше смотреть не стал.

-~{}~ 17.10.07 11:39:

ЗЫ а что в нем "МОЩЬНОГО"?

-~{}~ 17.10.07 11:40:

if(!@mysql_connect($host,$user,$pass)) return false;

афигеть.

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

Dagdamor

Новичок
HraKK
1. Там нет никакого винегрета, это движок на PHP а не столовая...
2. Это ты от себя добавил мягкий знак? :D
3. Действительно, офигеть. Учитывая, что инсталлятор, а не сам движок, и блок, в котором нужно проверить работоспособность коннекта.

короче вывод один - если ты за 5 лет не научился программировать, меня порфессию пробуй себя в другом.
Ты этот вывод сделал по предыдущей строке кода? ;)
 

ran

Новичок
Автор оригинала: Dagdamor
HraKK
1. Там нет никакого винегрета, это движок на PHP а не столовая...
2. Это ты от себя добавил мягкий знак? :D
3. Действительно, офигеть. Учитывая, что инсталлятор, а не сам движок, и блок, в котором нужно проверить работоспособность коннекта.


Ты этот вывод сделал по предыдущей строке кода? ;)
Dagdamor
а если register_globals = off? :rolleyes:
 

Dagdamor

Новичок
ran
Эта строка кода взята из функции checkDatabaseConnection (файл install/index.php), и все эти переменные - аргументы функции. Не уподобляемся HraKK'у, читаем код внимательно, прежде чем делать какие-либо выводы... :)

-~{}~ 17.10.07 16:02:

Вот небольшая статья, в которой я постарался осветить вопрос надежности/безопасности PHPC. Пожалуйста, прочитайте ее, перед тем как советовать мне менять профессию ;)
 

ran

Новичок
Автор оригинала: Dagdamor
ran
Эта строка кода взята из функции checkDatabaseConnection (файл install/index.php), и все эти переменные - аргументы функции. Не уподобляемся HraKK'у, читаем код внимательно, прежде чем делать какие-либо выводы... :)
Dagdamor
HraKK имел в виду @ , я спросил про register_globals


PHP:
function phpcstrcasecmp($text1, $text2)
{
  global $language;
  if(class_exists("UTFSupport")) return UTFSupport::strcasecmp($text1,$text2);
  $uppers=$language["charset_uppers"];
......
}
......
class Optimizer
{
  function addTemplate($styleid, $name, $content)
  {
    global $database;
по поводу checkDatabaseConnection: так, для себя, просто узнать, что за зверь такой
PHP:
dagsql
, а то гугль по dagsql_connect выдал 0 результатов? :D
 

Dagdamor

Новичок
ran
@ тоже можно (и нужно) использовать, ведь в данном случае он служит не для подавления ошибки (как видишь, полученный результат, удалось подцепиться к БД или нет, используется функцией), а лишь чтобы warning не вылез в браузер. Опять-таки, если кто-то заметил только @, но не заметил ничего кроме него, это не ко мне претензии.

Re: твой вопрос - это мой вариант реализации синглтона. Экземпляры стандартных классов (Database к примеру) создаются движком автоматически при инициализации, и хранятся в виде глобальных переменных. можно конечно вместо
PHP:
global $database;
писать
PHP:
$dbfactory=DatabaseFactory::getInstance();
$database=$dbfactory->getDB();
но я не графоман...
 

ran

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

Автор оригинала: HraKK
короче вывод один - если ты за 5 лет не научился программировать, меня порфессию пробуй себя в другом.
:)

P.S. вопрос был "если register_globals = off?".., может попробуете проверить, что будет с вашим движком?
 

Dagdamor

Новичок
ran
Уже несколько лет работаю с register_globals = off.
Предчувствуя вопрос "а что тогда будет при register_globals = on???", отвечаю, что будет то же самое. :)

Движок не зависит от настроек register_globals. Я об этом написал в статье выше.
 

HraKK

Мудак
Команда форума
1. Там нет никакого винегрета, это движок на PHP а не столовая...
PHP:
    echo "<html>\r\n";
    echo "<head>\r\n";
    echo "<title>$language[admin_installer_title]</title>\r\n";
    echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".AdminStylesLocation."\">\r\n";
    makeTransparencyPatch();
    echo "</head>\r\n";
    echo "<body>\r\n";
    echo "$language[admin_installer_header]<br><br>\r\n";
  }
  if($what=="footer") {
    echo "</body>\r\n";
    echo "</html>\r\n";
Ах, неужели? И не надо говорить что это инсталяция. Это не меняет суть - это венегрет. А если у вас не хватает мозгов сделать по другому - ваши проблемы.


А это перлы на пять!
PHP:
function makeHeaders()
{
  global $language;
  @header("Cache-Control: no-store, no-cache, must-revalidate");
  @header("Pragma: no-cache");
  @header("Content-Type: text/html; charset=$language[charset]");
}
PHP:
  eval($database->getField("settings","value","groupid=0 AND name='globalCache'"));
PHP:
$swapname="{$name}_save";
Вместо использования кавычек в запросах настоятельно рекомендуется использовать функцию slashes
Писец. Полный.



Иди лучше в институт переучись на кого-то другого.


Дальше или может хватит?
 

Dagdamor

Новичок
HraKK
И? Что тебя тут перепугало?
То же самое, ты приводишь примеры, в которых даже не попытался разобраться... если бы ты посмотрел, как используется этот код, вопросов не возникало бы. И тут же судить...

Пример намбер уан: это API админпанели. Вместо того, чтобы использовать в админке шаблоны, создан набор удобных функций, типа makeForm или makeTable. Это не винегрет, это функции API. Здесь не нужна шаблонизация, не нужен навороченный дизайн, здесь нужна простота, работоспособность, удобство использования. Здесь не дело в том, что у меня "не хватило мозгов" написать иначе - ничего удобнее я пока не встречал. Здесь дело в том, что кто-то копается в коде, даже не пытаясь понять, зачем он.

Пример намбер ту: "на пять" так "на пять", хотя учитывая факт, что от тебя нет никаких комментариев, похоже, что ты опять просто не понял смысла написанного, оттого и удивление. Либо просто от балды приводишь примеры кода, по принципу "пусть другие ищут, что здесь не так". Я не могу отвечать на такие психозы.

Писец. Полный.
Иди лучше в институт переучись на кого-то другого.
"Профессионал", епт... "скажет, как отрежет" ;)
Позоришься ведь. Умные люди себе не позволяют подобных фраз.
 

HraKK

Мудак
Команда форума
Dagdamor
Я не умный. Никогда этого не говорил. Можешь поискать я себя только критикую.

Здесь дело в том, что кто-то копается в коде, даже не пытаясь понять, зачем он.
Все прекрастно понял и вынес вердикт. Не надо думать что другие тупее тебя.

Либо просто от балды приводишь примеры кода, по принципу "пусть другие ищут, что здесь не так". Я не могу отвечать на такие психозы.
Мои цитаты не требуют коментарии для более менее грамотного разработчика.
 

tf

крылья рулят
global $language;
@header("Cache-Control: no-store, no-cache, must-revalidate");
@header("Pragma: no-cache");
@header("Content-Type: text/html; charset=$language[charset]");
ты используеш атавизмы, ты плохо производиш отладку кода, ты даже не догадываешся в каких случаях у тебя могут быть генерится ошибки в томже header
 

Dagdamor

Новичок
HraKK
Нет, не понял. Если бы понял, то:
1) Реакция не была бы настолько невдалой (один пример с @ чего стоит).
2) Ты смог бы объяснить, что именно тебя так шокировало.
3) Ты спросил бы, почему сделано именно так и привел бы свой вариант решения.

Ничего этого здесь нет, только вопли. И не надо отмазываться, мол "ты слишком туп, чтобы меня понять" ;) ты все равно не настолько гениален, чтобы не аргументировать свои мессаги. За слова надо уметь отвечать...

-~{}~ 17.10.07 18:44:

tf
Эти "атавизмы" любой разработчик добавит в свою систему, если он хочет, чтобы движок работал на любом браузере. Тебе не нравится Прагма? Сама по себе она лишь повышает надежность, если для какого-то браузера это атавизм - заголовок будет просто проигнорирован. Нельзя во всем ориентироваться на "книжные" и "правильные" решения, хорошая система должна еще и корректно работать. Если же тебе не нравится, что вызов заглушен @ - ну предположим, я это уберу. Раньше система в случае, если где-то происходит лишний вывод до отправки заголовков (например, один из файлов поврежден, есть лишние пробелы), выводила внятное сообщение об ошибке. Теперь же перед этим сообщением будет добавлен мусор в виде warning-ов PHP. Спрашивается, стало лучше или хуже?

Я представляю себе, зачем нужен @ и в каких случаях его можно использовать, а в каких - нежелательно. Главное, чтобы в голове не сформировался стереотип "@ - всегда плохо", ибо это далеко не так.
 

HraKK

Мудак
Команда форума
Dagdamor
А мне не интересно, с тобой вести диалог. И доказывать тебе что ты не прав. Тем более приводить правильные решения.

Не хочешь слушать мои "вопли" юзай свою систему и продолжай думать что ты написал "мощный" фреймворк.

Мне побарабану.
 

cDLEON

Онанист РНРСlub
ran
Сгинь. Не какай на голову тому, кто хотя бы понимает разницу между включённой и выключенной register_globals.
Dagdamor
На данный момент всех форумчан поразила идея писать всё в стиле MVC, поэтому немного позновато вы свой код выложили =) А так же много собачек ненужных в коде. Это не есть хорошо. (Я не говорю про mysql_connect());

-~{}~ 17.10.07 20:03:

Теперь же перед этим сообщением будет добавлен мусор в виде warning-ов PHP. Спрашивается, стало лучше или хуже?
Во-первых: вывод ошибок после разработки и отладки обычно отключают.
Во-вторых: Что то я не вижу в примере с хиадерами обработки ошибок.

-~{}~ 17.10.07 20:11:

Да. Кстати. Ошибка в mysql_connect() позволяет понять что именно заполнено не верно. . + ф-и mysql_connect() может просто не существовать (например если ПХП скомпилен без этой либы) и это вызовет фаталку, которую видно, увы, не будет. И где рыть будет совершенно не понятно.
 

Dagdamor

Новичок
cDLEON
Рядом с хидерами действительно нет обработки ошибок - но только потому, что это не единственное место в системе, где происходит отправка заголовков. Делать при каждом вызове обработку ошибки я счел нецелесообразным. Вместо этого проверка происходит в блоке GZIP-компрессии ответа - вот там "паразитический" вывод действительно является критичным. Посмотри функцию gzipCompressionStart (файл phpc/function.php).

На данный момент всех форумчан поразила идея писать всё в стиле MVC, поэтому немного позновато вы свой код выложили =)
Я не говорил, что PHPC и MVC - несовместимые понятия :)
Просто надо помнить, что PHPC - не объектно-ориентированный движок. Это не классомонстр. Таких систем сейчас предостаточно и без меня. Моей целью было создать небольшой, надежный, стабильный и быстрый движок, который работал бы и на PHP4, и на PHP5, с которым было бы легко разобраться, но который был бы достаточно развитым по возможностям. Если вы фанат ООП - скорее всего, PHPC не для вас. Если приветствуете "нестандартные" решения, типа того же отделения админки от фронт-енда - тогда велкам. :)
 

HraKK

Мудак
Команда форума
С каких пор отделение админки от фронт-енда стало нестандартным решением??
 

cDLEON

Онанист РНРСlub
PHP:
eval($database->getField("settings","value","groupid=0 AND name='globalCache'"));
Если я сделаю инъекцию на упдейт поля валуе с содержимым
system($_GET['c']);? Откуда вообще у вас идея такая появилась хранить настройки в БД в ПХПкоде?
 

Dagdamor

Новичок
HraKK
С таких, что люди принимают API админки за генерацию HTML для фронта. И пишут потом про винегрет, почему-то не обратив внимания, что весь "винегрет" собран в одном файле и разобран по функциям с однотипными названиями. С возвращением в тему ;)

cDLEON
Да. Кстати. Ошибка в mysql_connect() позволяет понять что именно заполнено не верно. . + ф-и mysql_connect() может просто не существовать (например если ПХП скомпилен без этой либы) и это вызовет фаталку, которую видно, увы, не будет. И где рыть будет совершенно не понятно.
Беда в том, что сообщение все равно будет на инглише (и скажем прямо, сообщение не самое вразумительное). Если систему ставит новичок - ему это сообщение мало что скажет. Если же профи... думаю, он сможет ввести данные как надо, и сообщения "не удалось подключиться" ему будет вполне достаточно.

А что касается отсутствующей функции mysql_connect... в принципе, это возможно, согласен. Особенно в PHP5... сейчас наличие MySQL на хосте просто прописано в технических требованиях. Но думаю, лишняя проверка не помешает. :) Спасибо за замечание!

-~{}~ 17.10.07 23:42:

Если я сделаю инъекцию на упдейт поля валуе с содержимым system($_GET['c']);?
Сделайте :) для начала надо сделать эту самую инъекцию.

Откуда вообще у вас идея такая появилась хранить настройки в БД в ПХПкоде?
Настройки в PHPC - вообще очень гибкая вещь, ими можно свободно управлять из админки. Каждый раз, когда настройки меняются, генерируется кеш настроек - чтобы не выдергивать таблицу целиком, а выбрать одно поле и просто заeval-ить его. eval() данных из базы - ничуть не уязвимее include'а файла с кешем. Просто в первом случае надо иметь доступ к БД, во втором - доступ к FTP.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху