1

Тема: непонятки с кодом

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

index.php, с самого начала:

<?php
/**
 * Displays a list of the categories/forums that the current user can see, along with some statistics.
 *
 * @copyright Copyright (C) 2008 PunBB, partially based on code copyright (C) 2008 FluxBB.org
 * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
 * @package PunBB
 */


if (!defined('FORUM_ROOT'))
    define('FORUM_ROOT', './');

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

Добавлено спустя     6 минут   38 секунд:
functions.php

    // If a database connection was established (before this error) we close it
    if (isset($GLOBALS['forum_db']))
        $GLOBALS['forum_db']->close();

    exit;

ЗЫ: я не критикую ни кого, просто чистый интерес - почему так сделали, люди же не дилетанты, значит, есть в этом какая-то суть

Добавлено спустя     25 минут   34 секунды:
essentials.php

// Attempt to load the configuration file config.php
if (file_exists(FORUM_ROOT.'config.php'))
    include FORUM_ROOT.'config.php';

// If we have the 1.2 constant defined, define the proper 1.3 constant so we don't get
// an incorrect "need to install" message
if (defined('PUN'))
    define('FORUM', 1);

if (!defined('FORUM'))
    error('The file \'config.php\' doesn\'t exist or is corrupt. Please run <a href="'.FORUM_ROOT.'admin/install.php">install.php</a> to install PunBB first.');

Добавлено спустя     28 минут   51 секунду:
народ, что такое что такое prefetch requests?

// Block prefetch requests
if (isset($_SERVER['HTTP_X_MOZ']) && $_SERVER['HTTP_X_MOZ'] == 'prefetch')
{
    header('HTTP/1.1 403 Prefetching Forbidden');

    // Send no-cache headers
    header('Expires: Thu, 21 Jul 1977 07:30:00 GMT');    // When yours truly first set eyes on this world! :)
    header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache');        // For HTTP/1.0 compability

    exit;
}

Добавлено спустя     29 минут   44 секунды:
почему тут?
тот же файл...

// Record the start time (will be used to calculate the generation time for the page)
list($usec, $sec) = explode(' ', microtime());
$forum_start = ((float)$usec + (float)$sec);

Добавлено спустя     32 минуты   18 секунд:
подобное, в отличие от первого куска кода, объяснить можно... но все равно, жесть какая-то

// If the cache directory is not specified, we use the default setting
if (!defined('FORUM_CACHE_DIR'))
    define('FORUM_CACHE_DIR', FORUM_ROOT.'cache/');

Добавлено спустя     35 минут   5 секунд:
вообще весело, под какие задачи?
пожалуй, дальше подобного постить не буду, иначе очень много всего выйдет

// If a cookie name is not specified in config.php, we use the default (forum_cookie)
if (empty($cookie_name))
    $cookie_name = 'forum_cookie';

Добавлено спустя     48 минут   44 секунды:
в общем, на сегодня исследования закончим
ничего серьезного пока найдено не было, искрене надеюсь, что и не будет smile
мне не очень понравилась оптимизация кода не под производительность, а под программистов: программисту раз-два-десяток-пусть даже сотню раз его править, а выполняться он будет о-го-го сколько раз... к тому же, как я понял, разработчики расчитывают на сторонных чуваков и их доработки, раз такие примитивные и необходимые вещи, как bb-панель, капча или голосование в базовой версии реализованы не были... а сам код, конечно, крайне приятный;
совершенно не понравилось наличие утф-8, если я когда-либо и стану использоваться punbb 1.3, все, что касается утф-8 снесу своими руками, просто не вижу смысла в такой грандиозной унификации, нормально настроенные локальные параметры сервера все решают;
а в остальном, свежая версия порадовала smile

Поделиться

2

Re: непонятки с кодом

Хорошая тема. У меня тоже есть вопрос.

Увидел, что в коде активно используются ассоциативные массивы, даже многомерные - результат довольно изящен, а-ля DOM. Вопрос в том, насколько быстро это работает в PHP? Не будет ли 1.3 создавать значительно большую нагрузку на сервер по сравнению с 1.2?

PunBBmaster пишет:

не вижу смысла в такой грандиозной унификации

Тоже люблю, когда есть выбор. Важна не конкретная кодировка, а чтобы данные не портились.

Сайт Freeman

Поделиться

3

Re: непонятки с кодом

Бред.

С умным видом выдавать за плохой - адекватный и нормальный код разработчиков punBB1.3.. бред smile

Единственное что мне не нравится в punBB1.3 - это отсутствие ООП и слишком опасная реализация хуков. Остальное все более-менее.

if (!defined('FORUM_ROOT'))
    define('FORUM_ROOT', './');
смысл данной конструкции? hmm
я не говорю, что какой-то несчастный if хоть как-то повлияет на производительность, но все же? или есть какой-то тайный баг, о котором я не слышал?

Смысл очень простой. Должна быть константа. Если ее нет, то установим по умолчанию.

совершенно не понравилось наличие утф-8, если я когда-либо и стану использоваться punbb 1.3, все, что касается утф-8 снесу своими руками, просто не вижу смысла в такой грандиозной унификации, нормально настроенные локальные параметры сервера все решают;

smile) Ужс. UTF-8 уже давно захватил мир, а вы все в кубики играете. Если бы все американцы думали также как и ты, то мы бы до сих пор мучались с русификациями и кодировками.

Кароч реально бред, извини за прямоту.

Просто сочувствующий :)

Поделиться

4

Re: непонятки с кодом

// If the cache directory is not specified, we use the default setting
if (!defined('FORUM_CACHE_DIR'))
    define('FORUM_CACHE_DIR', FORUM_ROOT.'cache/');

Здесь тоже всё просто - если раньше не был определен каталог для кэша (например полезно для мультифорумной реализации, дабы не перекраивать ядро), то он назначается по-умолчанию.

// If a cookie name is not specified in config.php, we use the default (forum_cookie)
if (empty($cookie_name))
    $cookie_name = 'forum_cookie';

Трудно объяснить, видимо "защита от дурака", на тот случай если конфиг кроме собственно конфига решает еще какие-то задачи, т.е.  не сгенерирован автоматически, или опять для мультифорумов.

if (!defined('FORUM_ROOT'))
    define('FORUM_ROOT', './');

Поскольку движок поддерживает sef, то перед этой конструкцией может быть выполнен ещё какй-либо код, который может определить свой FORUM_ROOT.

    // If a database connection was established (before this error) we close it
    if (isset($GLOBALS['forum_db']))
        $GLOBALS['forum_db']->close();

    exit;

Это по-моему вообще не должно вызывать вопросов, закрывается соединение с БД после возникновения ошибки. Что не нравится?
Это все моё имхо. Интересно что скажут разработчики.

Сайт hcs

Поделиться

5

Re: непонятки с кодом

hcs пишет:

Интересно что скажут разработчики.

Честно говоря, затрудняюсь ответить, т.к. не понимаю сути "претензий" ))
PunBBmaster просто берёт куски кода и "громко вздыхает" над ними. И что?
Огульное высказывание про UTF-8 окончательно погасило стремление к диалогу.

См. например
Абсолютный Минимум, который Каждый Разработчик Программного Обеспечения Обязательно Должен Знать о Unicode и Наборах Символов
Moving to Unicode 5.1

Carpe diem

Сайт Titan

Поделиться

6

Re: непонятки с кодом

А по моему вопросу про ассоциативные массивы? Мне такая реализация понравилась, сомнения только в скорости.

Сайт Freeman

Поделиться

7

Re: непонятки с кодом

PHP отлично работает с массивами. в том числе с ассоциативными. это один из его главных плюсов.

Просто сочувствующий :)

Поделиться

8

Re: непонятки с кодом

Adelf пишет:

С умным видом выдавать за плохой - адекватный и нормальный код разработчиков punBB1.3.. бред

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

hcs
благодарю, пролили свет на часть вопросов...

Titan пишет:

Огульное высказывание про UTF-8 окончательно погасило стремление к диалогу.

я писал не за проект в целом, а со своей точки зрения
мне поддержка UTF-8 не нужна, и, надеюсь, в жизни не понадобится

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

PunBBmaster пишет:

оптимизация кода не под производительность, а под программистов

Поделиться

9

Re: непонятки с кодом

мне поддержка UTF-8 не нужна, и, надеюсь, в жизни не понадобится

А чем он так плох? неужели увеличение трафика.. ну раза в полтора так сильно влияет? Если вы программист - очень советую в своих проектах как можно скорее перейти на utf. Скоро слова win1251 никому ничего говорить не будут.

Просто сочувствующий :)

Поделиться

10

Re: непонятки с кодом

PunBBmaster пишет:

мне поддержка UTF-8 не нужна, и, надеюсь, в жизни не понадобится

Не понимаю, как можно так говорить. Если вы хоть немного веб-разработчик, вы должны видеть очевидные плюсы, к чему такая категоричность? smile
Минус у utf как раз таки только один, совершенно мне непонятный - встречается индивидуальная непереносимость у некоторых разработчиков wink

PunBB.Ru ☭

Сайт nobody

Поделиться

11

Re: непонятки с кодом

по поводу UTF-8 скажем так, как я уже писал, мне проще настроить или подобрать сервер под конкретный проект, имеются в виду вообще различные проекты, а не просто форум, чем делать это путем программинга на php... я бы сказал даже не проще в плане работы, а проще в плане гемора и нагрузки, простой пример: я поддерживаю один развлекательный ресурс, который на пике генерирует 1.2 - 1.3к запросов к php+mysql "движку" в секунду, при этом среднее время генерации странички в пике составляет 0.003-0.005 сек... все это дело "крутится" на вдс за 2к рублей, при этом, не потребляя и половины выделенных ресурсов wink а теперь вопрос - что было бы с нагрузкой, просто прикрути я к нему поддержку UTF-8? hmm

ну это дело такое... а вот вопрос, который меня с самого утра начал волновать, это:

hcs пишет:
    // If a database connection was established (before this error) we close it
    if (isset($GLOBALS['forum_db']))
        $GLOBALS['forum_db']->close();

    exit;

Это по-моему вообще не должно вызывать вопросов, закрывается соединение с БД после возникновения ошибки. Что не нравится?
Это все моё имхо. Интересно что скажут разработчики.

разве при exit-е все установленные коннекты автоматически не закрываются? равно как и mysql_free_result... смысл в этой функции вижу только тогда, когда php скрипт вызывается, к примеру, с под рута и крутится продолжительное время...
во на if ($p_connect) можно было бы поставить, а так зачем оно? hmm
ЗЫ: повторюсь в очередной раз, я ни в коем случае ни кого не критикую, сам разработчик, и раз парни, писавшие punbb так поступили, значит в этом должен быть смысл, вот суть этого самого смысла я для себя и хочу понять smile

Поделиться

12

Re: непонятки с кодом

PunBBmaster пишет:

разве при exit-е все установленные коннекты автоматически не закрываются?

Со стороны клиента они просто обрываются, а со стороны сервера закрываются по таймауту.
В расширении mysql для пхп реализован сборщик незакрытых соединений с мускулом?

Сайт hcs

Поделиться

13

Re: непонятки с кодом

я поддерживаю один развлекательный ресурс, который на пике генерирует 1.2 - 1.3к запросов к php+mysql "движку" в секунду, при этом среднее время генерации странички в пике составляет 0.003-0.005 сек...

Мож там тока статика? smile
Неуверен что поддержка UTF сильно нагрузит систему. Зато ты лишаешься на своих страничках таких правильных и простых вещей как –, ©, « » - правда эти заменяются html-символами, но врядли заставишь редакторов прогонять все через типограф. Французы, немцы, китайцы, японцы, татары на твоем сайте не смогут на своем языке написать что-либо, придется как-либо через это место пытаться писать, заменяя символы своего языка русскими и английскими буквами. UTF - это интернетный знак дружбы народов smile

разве при exit-е все установленные коннекты автоматически не закрываются?

Данный аккуратный стиль программинга - очень правилен. Нельзя разрабатывая скрипты опираться на то, что всегда работаешь в той среде, которая за тебя все закроет и подчистит. Опираться можно только в таких средах как Java, у которой очистка - в крови. PHP, хоть и подчищает за скриптом, не содержит той самой идеологии Явы - "мусори везде, я соберу". Удалить за собой коннект к базе - правильный и хороший тон. mysql_free_result и mysql_close совсем не зря существуют.

Просто сочувствующий :)

Поделиться

14

Re: непонятки с кодом

Adelf пишет:

Французы, немцы, китайцы, японцы, татары на твоем сайте не смогут на своем языке написать что-либо, придется как-либо через это место пытаться писать, заменяя символы своего языка русскими и английскими буквами

В предыдущей версии PunBB в Опере (думаю, что и в Лисе тоже) можно было запросто писать на чешском и китайском, имея основной кодировкой Windows-1251. Да, в базе они хранятся в виде &x<код>, но если основной текст на сайте кириллический, UTF-а может быть и много. smile

Adelf пишет:

UTF - это интернетный знак дружбы народов

В случае Web достаточно, чтобы кодировка сохранялась (не портилась), а какая конкретно - неважно. Тот же принцип будет использоваться в Единой среде. Как раз пишу сейчас поддержку Unicode 5.x - он будет наибольшим общим знаменателем. К слову сказать, iconv (возможно, только под Винду) сделан просто ужасно с точки зрения проектирования.

Сайт Freeman

Поделиться

15

Re: непонятки с кодом

hcs пишет:

Со стороны клиента они просто обрываются, а со стороны сервера закрываются по таймауту.
В расширении mysql для пхп реализован сборщик незакрытых соединений с мускулом?

дельная мыслб, мм.. конечно, заставляет задуматься... хотя! разве при наличии exit; это явно не интерпретируется... очень, очень в этом сомниваюсь, т.е., в данном случае таймаута явно ни кто ни от кого ждать не должен...

Adelf пишет:

Мож там тока статика?

сам писал все big_smile

Adelf пишет:

Данный аккуратный стиль программинга - очень правилен. Нельзя разрабатывая скрипты опираться на то, что всегда работаешь в той среде, которая за тебя все закроет и подчистит. Опираться можно только в таких средах как Java, у которой очистка - в крови. PHP, хоть и подчищает за скриптом, не содержит той самой идеологии Явы - "мусори везде, я соберу". Удалить за собой коннект к базе - правильный и хороший тон.

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

Adelf пишет:

mysql_free_result и mysql_close совсем не зря существуют.

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

из мана:
"Использование mysql_close() не необходимо для непостоянных соединений. Они автоматически закрываются в конце скрипта. См. также высвобождение ресурсов."
"mysql_free_result() нуждается в вызове только в том случае, если вы всерьёз обеспокоены тем, сколько памяти используют ваши запросы к БД, возвращающие большое количество данных. Вся память, используемая для хранения этих данных автоматически очистится в конце работы скрипта."
а данные функции вызываются непосредственно перед exit-ом...

Поделиться

16

Re: непонятки с кодом

PunBBmaster пишет:

разве при наличии exit; это явно не интерпретируется...

Кем интерпретируется? PHP работает с мускулом через расширение, т.е. если кто и должен заботится о закрытии соединения, то это либо расширение, либо программист. Расширения едва ли перехватывает exit, а ядро не факт что это делает, не обязано. Но тут надо читать документацию, я на 100% не уверен, просто излагаю своё видение вещей основываясь на логике и опыте.

Сайт hcs

Поделиться

17

Re: непонятки с кодом

ЗЫ я уверен, что иллюзия корректного закрытия соединения основывается на разрыв+таймаут. Невооруженным глазом это не заметно. Таймаут обычно 30секунд.

Сайт hcs

Поделиться

18

Re: непонятки с кодом

hcs пишет:

ЗЫ я уверен, что иллюзия корректного закрытия соединения основывается на разрыв+таймаут. Невооруженным глазом это не заметно. Таймаут обычно 30секунд.

т.е., по завершению работы скрипта, коннект и данные, связаны с ним, весят до таймаута? hmm
или я не так понял?
если так, то каким тогда образом можно объяснить то же значение "max. concurrent connections" менее 300, при 100000 запросах в минуту (пусть запросов, не коннектов, но там примерно 10 запросов/коннект), если коннект в скрипте ни кто не прекращает?

hcs пишет:

Кем интерпретируется? PHP работает с мускулом через расширение, т.е. если кто и должен заботится о закрытии соединения, то это либо расширение, либо программист. Расширения едва ли перехватывает exit, а ядро не факт что это делает, не обязано. Но тут надо читать документацию, я на 100% не уверен, просто излагаю своё видение вещей основываясь на логике и опыте.

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

Поделиться

19

Re: непонятки с кодом

Довайте докопаемся до истины.

Сайт hcs

Поделиться

20

Re: непонятки с кодом

Соединение с сервером будет закрыто при завершении исполнения скрипта, если до этого оно не будет закрыто с помощью функции mysql_close().

Вы правы.

Сайт hcs

Поделиться

21

Re: непонятки с кодом

FastCGI будем обсуждать? Там может и не закрываться(хотя там может и не надо закрывать smile ).

Просто сочувствующий :)

Поделиться

22

Re: непонятки с кодом

В документации сказано, что не обязательно закрывать соединения и очищать результаты для расширения mysql. Где-то читал, что для mysqli закрывать рекомендуется. А как с этим обстоят дела в PostgreSQL и SQLite - вообще непонятно smile

Сайт parpalak

Поделиться

23

Re: непонятки с кодом

Где-то читал, что для mysqli закрывать рекомендуется. А как с этим обстоят дела в PostgreSQL и SQLite - вообще непонятно

Вооо smile не все расширения PHP для баз данных работают так чисто как mysql smile  я же чувствовал, что такой, чистый стиль программинга гораздо меньше хлопот приносит в будущем.

Просто сочувствующий :)

Поделиться

24 (04.12.2008 12:10 отредактировано parpalak)

Re: непонятки с кодом

parpalak пишет:

А как с этим обстоят дела в PostgreSQL и SQLite - вообще непонятно

Adelf пишет:

не все расширения PHP для баз данных работают так чисто как mysql

Я не имел в виду, что у расширений есть какие-то проблемы. Я хотел сказать, что лично я не знаю, есть ли плюсы или минусы закрытия/незакрытия соединения в SQLite и PostgreSQL.

Сайт parpalak

Поделиться

25

Re: непонятки с кодом

Adelf пишет:

чистый стиль программинга гораздо меньше хлопот приносит в будущем.

тогда соответствующая функция для mysql должна была быть как минимум пустой

Поделиться