Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Профайлер для скриптов на PHP (Дмитрий Котеров)
Goto page 1, 2  Next
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Mar 17, 2003 10:47 pm ()
   Post subject: Профайлер для скриптов на PHP
Reply with quote

Вот, в процессе пришлось написать код для выявления самых тормозящих мест в скрипте (профайлер, то есть). Это возможно в Денвере со включенным php_dbg.dll (входит в базовый пакет). Пока что на коленке:
Code (any language): скопировать код в буфер обмена
<?
function dbg_profile($dbg_prof_results = false)
{
        if (!$dbg_prof_results) dbg_get_profiler_results(&$dbg_prof_results);

        $ctx_cache = array();
        $contexts = array();
        foreach ($dbg_prof_results["line_no"] as $idx => $line_no) {
                $mod_no = $dbg_prof_results["mod_no"][$idx];
                dbg_get_module_name($mod_no, &$mod_name);
               
                $hit_cnt = $dbg_prof_results["hit_count"][$idx];

                $time_sum = $dbg_prof_results["tm_sum"][$idx] * 1000;
                $time_avg_hit = $time_sum / $hit_cnt;
                $time_min = $dbg_prof_results["tm_min"][$idx] * 1000;
                $time_max = $dbg_prof_results["tm_max"][$idx] * 1000;

                dbg_get_source_context($mod_no, $line_no, &$ctx_id);
                if (@$ctx_cache[$ctx_id]) {
                        $ctx_name = $ctx_cache[$ctx_id];
                } else {
                        if (dbg_get_context_name($ctx_id, &$ctx_name) && strcmp($ctx_name,"") == 0)
                                $ctx_name = "::main";
                        $ctx_cache[$ctx_id] = $ctx_name;
                }

                $cont =& $contexts[$ctx_name];
                if (!@$cont) $cont = array(
                        "file" => $mod_name,
                        'hit_cnt' => 0,
                        'time_sum' => 0,
                        'lines' => array()
                );

                $cont['hit_cnt'] += $hit_cnt;
                $cont['time_sum'] += $time_sum;
                $cont['lines'][$line_no] = array(
                        "hit_cnt"  => $hit_cnt,
                        "time_sum" => $time_sum,
                );
        }

        uasort($contexts, 'dbg_profile_cmp');
        foreach ($contexts as $ctx=>$data) {
                uasort($contexts[$ctx]['lines'], 'dbg_profile_cmp');
        }
        return $contexts;
}

function dbg_profile_cmp($x,$y)
{
        $a = $x["time_sum"];
        $b = $y["time_sum"];
        if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}


function dbg_draw_contexts($contexts, $lines_detail = 3)
{
        echo "
                <br><table cellspacing=2 cellpadding=2 border=0 style='font:8pt courier'>
            <thead>
                <tr style='background:#808080; color:#FFFFFF'>
                        <td> file </td>
                        <td> function </td>
                        <td> hit_cnt </td>
                        <td> time </td>
                        <td> % time </td>
                </tr></thead>
                <tbody style='vertical-align: top'>
        ";

        $total_time = $total_hits = 0;
        foreach ($contexts as $context=>$data) {
                $total_time += $data['time_sum'];
                $total_hits += $data['hit_cnt'];
        }

        $idx = 0;
        foreach ($contexts as $context=>$data) {
                $bk = ($idx++ & 1) ? "#ffffff" : "#e0e0e0";
                $file = basename($data['file']);
                $p_time = sprintf("%.3f", 100 * $data['time_sum'] / $total_time);
                echo @"
                        <tr style='background:$bk'>
                        <td>$file</td>
                        <td>$context</td>
                        <td>$data[hit_cnt]</td>
                        <td>$data[time_sum]</td>
                        <td>$p_time</td>
                    </tr>
                ";
                if ($idx-1 < $lines_detail) {
                        $i = 0;
                        foreach ($data['lines'] as $l=>$d) {
                                $p_time = sprintf("%.3f", 100 * $d['time_sum'] / $total_time);
                                echo @"
                                        <tr style='background:$bk'>
                                        <td>...</td>
                                        <td>&&line $l</td>
                                        <td>&&$d[hit_cnt]</td>
                                        <td>&&$d[time_sum]</td>
                                        <td>&&$p_time</td>
                                        </tr>
                                ";
                                if ($i++>20) break;
                        }
                }
        }
        echo "</tbody></table>";
}
?>
Использование:
Code (any language): скопировать код в буфер обмена
<?
include_once "Profiler.php";

function A() {
        for($i=0; $i<10000; $i++) ;
}

function B() {
        for($i=0; $i<5000; $i++) ;
}

A();
B();

dbg_draw_contexts(dbg_profile());
?>
Распечатка имеет вид: (см. аттачмент).


profile.gif
 Description:
Результаты работы профайлера.
 Filesize:  10.23 KB
 Viewed:  113493 Time(s)

profile.gif


Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Mar 17, 2003 10:50 pm (спустя 2 минуты)
   Post subject:
Reply with quote

Может, кому пригодится. Но только учтите, что на больших скриптах (>2000 строк) профайлер сильно тормозит (вернее, тормозит одна-единственная функция dbg_get_source_context(), и тут уж ничего не поделаешь), так что запуск скрипта с профайлером занимает минуты (поставьте max_execution_time побольше в php.ini).
Back to top
View user's profile Send private message Send e-mail
nagash
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sun Jun 15, 2003 7:07 pm (спустя 2 месяца 28 дней 20 часов 17 минут)
   Post subject:
Reply with quote

а где можно заполучить этот php_dbg.dll или только качать денвер?
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sun Jun 15, 2003 7:14 pm (спустя 6 минут)
   Post subject:
Reply with quote

С оффициального сайта я думаю
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sun Jun 15, 2003 11:11 pm (спустя 3 часа 57 минут)
   Post subject:
Reply with quote

Поищите в Гугле, должно найтись. Это достаточно распространенный модуль.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jun 16, 2003 2:57 pm (спустя 15 часов 46 минут)
   Post subject:
Reply with quote

Простите меня, а где функция dbg_get_profiler_results(), или где она должна лежать ???
Code (any language): скопировать код в буфер обмена
Fatal error: Call to undefined function: dbg_get_profiler_results() in h:\home\doom\www\yuacbb\profiler.php on line 4
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Jun 16, 2003 5:28 pm (спустя 2 часа 31 минуту)
   Post subject:
Reply with quote

Эта функция не документирована (если не ошибаюсь) и доступна, если подключить php_dbg.dll в php.ini.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jun 16, 2003 7:08 pm (спустя 1 час 40 минут)
   Post subject:
Reply with quote

Хм... У меня она не работает, хотя дебаггер подключен
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Jun 16, 2003 7:26 pm (спустя 17 минут)
   Post subject:
Reply with quote

А у меня тогда почему работает?
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Tue Jun 17, 2003 7:34 am (спустя 12 часов 7 минут)
   Post subject:
Reply with quote

Только что проверял - модуль подключен...

Можете на форуме выложить свой, потому что у меня Денверовский
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Jun 17, 2003 5:19 pm (спустя 9 часов 44 минуты)
   Post subject:
Reply with quote

Какая версия Денвера? Может, пора обновить? В последней работает, только что проверил.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Tue Jun 17, 2003 6:22 pm (спустя 1 час 3 минуты)
   Post subject:
Reply with quote

6-10 2003 - что может быть новее...

В общем, пожалуйста, выложите свой php_dbg.dll, если не заработает - будем разбираться...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Jun 18, 2003 9:23 pm (спустя 1 день 3 часа 1 минуту)
   Post subject:
Reply with quote

Выкладываю. Только это не поможет.
Какая у Вас ОС? Точно модуль подключен в php.ini? Не валяется ли где-то старая версия dll-ки?
Проверьте еще раз на всякий случай.


php_dbg.zip
 Description:

Download
 Filename:  php_dbg.zip
 Filesize:  21.96 KB
 Downloaded:  1497 Time(s)

Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Jun 19, 2003 9:11 am (спустя 11 часов 48 минут)
   Post subject:
Reply with quote

Хм...
Спасибо. Не помогло :)

ОС - Windows XP Professional SP1 Русский
В php.ini модуль 100 % подключен - потому что я сам его правил для подключения GD2 - и функции GD2 работают (например imagecopyresampled), php_dbg.dll я не отключал
Старая версия DLL найдена только в распакованном для изучения install.bat, архиве, там php_dbg.dll я на всякий случай тоже удалил

По-моему в php есть режим показывать startup errors - может это как-нибудь поможет ???
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Jun 19, 2003 8:27 pm (спустя 11 часов 16 минут)
   Post subject:
Reply with quote

Вряд ли.

Но чудес-то не бывает. Посмотрите в phpinfo(): подключен ли php_dbg, или нет.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Jun 20, 2003 12:31 pm (спустя 16 часов 4 минуты)
   Post subject:
Reply with quote

Если я не ошибаюсь, то он не подключен... Я не знаю почему, но в phpinfo не было ничего написано про dbg вообще... Вопрос - как его подключить ?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Fri Jun 20, 2003 7:45 pm (спустя 7 часов 13 минут)
   Post subject:
Reply with quote

Для начала удалите все старые php.ini из разных мест и оставьте только тот, который в директории PHP. Неужели так трудно догадаться?..
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Jun 20, 2003 9:57 pm (спустя 2 часа 12 минут)
   Post subject:
Reply with quote

Хм... Странно как-то... Я что, совсем дурак... Почему он php.ini в папке с apache использовал ??? Если раньше он использовал php.ini в папке с PHP... Спасибо :)...

P.S. Если несложно, добавьте в Денвер удаление php.ini из папки с апачем...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Fri Jun 20, 2003 11:36 pm (спустя 1 час 38 минут)
   Post subject:
Reply with quote

К сожалению, я не могу этого сделать: вдруг там какие-то настройки специфичные. Разве что добавить в инсталлятор возможность переноса, но это как-то кривовато. К сожалению, приходится идти на определенные издержки в надежде, что новые версии Денвера скоро совсем вытеснят старые.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat Aug 02, 2003 2:18 pm (спустя 1 месяц 11 дней 14 часов 42 минуты)
   Post subject:
Reply with quote


М

Перенесено из форума: Программирование::PHP::Все в кучу.
Перенесено в форум: Программирование::PHP::Склад готовых решений.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Эсс
Участник форума



Joined: 06 Jul 2003
Posts: 2533
Карма: 3
   поощрить/наказать

Location: Таллинн, Эстония

PostPosted: Sat Sep 13, 2003 11:09 am (спустя 1 месяц 10 дней 20 часов 51 минуту)
   Post subject:
Reply with quote

Воспользовавшись своим служебным положением снова открываю тему :).
Вот понадобилось выявить, какая функция на странице тормозит. Страница грузится около 10 секунд, это не дело.
Вставил в начале страницы
Code (php): скопировать код в буфер обмена
<?Uses("profiler");?>
и в конце
Code (php): скопировать код в буфер обмена
<?dbg_draw_contexts(dbg_profile());?>
Итог: 98.7% времени уходит на templatehandler.php.
Делаю проверку templatehandler.php, оказывается, что
Половина времени уходит на код до 13-й строки, а вторая половина на код с 13-й по 24-ю строки. А это части кода для проверки, не пытается ли пользователь запустить обработчик напрямую, минуя Apache и коррекция переменных окружения.

Что я не так делаю??
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Sun Sep 14, 2003 12:17 am (спустя 13 часов 7 минут)
   Post subject:
Reply with quote

Похоже, что не так меряешь 8*)

Советую начать с того, что поотключать все функции отрисовки контента и подключать их по одной.
Back to top
View user's profile Send private message
Дмитрий Эсс
Участник форума



Joined: 06 Jul 2003
Posts: 2533
Карма: 3
   поощрить/наказать

Location: Таллинн, Эстония

PostPosted: Sun Sep 14, 2003 10:06 am (спустя 9 часов 48 минут)
   Post subject:
Reply with quote

WingedFox wrote:
Похоже, что не так меряешь 8*)
Я заметил :). Будем пробовать.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Эсс
Участник форума



Joined: 06 Jul 2003
Posts: 2533
Карма: 3
   поощрить/наказать

Location: Таллинн, Эстония

PostPosted: Sun Sep 14, 2003 4:35 pm (спустя 6 часов 29 минут)
   Post subject:
Reply with quote

Хух, снизил скорость загрузки страницы до 0.5 сек., заменив поиск по регам на поиск с LIKE. Не думал, что реги так тормозят.
Люди, не пользуйтесь регами в SQL запросах.
Back to top
View user's profile Send private message Send e-mail
Eugene Babushkin
Участник форума



Joined: 01 Aug 2003
Posts: 263
Карма: 4
   поощрить/наказать

Location: 59, Russia

PostPosted: Sun Dec 07, 2003 1:17 pm (спустя 2 месяца 22 дня 20 часов 41 минуту)
   Post subject:
Reply with quote

Скрипт отличный!
У меня есть вопрос: Что означает колонка "hit_cnt" и в каких единицах измеряется "time"?
Back to top
View user's profile Send private message
Дмитрий Эсс
Участник форума



Joined: 06 Jul 2003
Posts: 2533
Карма: 3
   поощрить/наказать

Location: Таллинн, Эстония

PostPosted: Sun Dec 07, 2003 1:23 pm (спустя 5 минут)
   Post subject:
Reply with quote

GreatWeb wrote:
и в каких единицах измеряется "time"?
В секундах, а в правом столбце в %. Про hit_cnt не знаю точно, но похоже, что это количество точек измерения.
Back to top
View user's profile Send private message Send e-mail
Eugene Babushkin
Участник форума



Joined: 01 Aug 2003
Posts: 263
Карма: 4
   поощрить/наказать

Location: 59, Russia

PostPosted: Sun Dec 07, 2003 8:04 pm (спустя 6 часов 41 минуту)
   Post subject:
Reply with quote

Вряд ли в секундах, скорее в милисекундах... такой скрипток не мог выполняться так долго...
Back to top
View user's profile Send private message
Дмитрий Эсс
Участник форума



Joined: 06 Jul 2003
Posts: 2533
Карма: 3
   поощрить/наказать

Location: Таллинн, Эстония

PostPosted: Sun Dec 07, 2003 8:15 pm (спустя 10 минут)
   Post subject:
Reply with quote

GreatWeb:
Ну да извеняюсь, что-то я не то ляпнул. Конечно в милисекундах.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Dec 08, 2003 12:51 pm (спустя 16 часов 35 минут)
   Post subject:
Reply with quote

Дмитрий Котеров

Скажите, что за колонка "hit_cnt"?
Back to top
Timka
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Feb 05, 2004 2:20 pm (спустя 1 месяц 28 дней 1 час 29 минут)
   Post subject: надо проверить установку переменных [Debugger]
Reply with quote

PHP.INI

[Debugger]
debugger.enabled=On
debugger.profiler_enabled=On
Back to top
Пашка
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Feb 06, 2004 1:22 pm (спустя 23 часа 2 минуты)
   Post subject: Я не въехал
Reply with quote

У меня никаких отчетов не появляется. Пустая табличка только вылазит, и всё. Что-то не так?
Back to top
BoFFiN
Участник форума



Joined: 21 Jul 2003
Posts: 136
Карма: -1
   поощрить/наказать


PostPosted: Mon Feb 09, 2004 6:10 pm (спустя 3 дня 4 часа 47 минут)
   Post subject:
Reply with quote

Пашка:

Тоже самое...
Мало того, если в php.ini не отключу Zend выскакивает ошибка: Zend Optimez: Unable to register functions, unable to load. После чего PHP критически завершает работу...
В чём дело, господа?! В Чём дело?!
Back to top
View user's profile Send private message
BoFFiN
Участник форума



Joined: 21 Jul 2003
Posts: 136
Карма: -1
   поощрить/наказать


PostPosted: Thu Feb 26, 2004 3:13 pm (спустя 16 дней 21 час 3 минуты)
   Post subject:
Reply with quote

Молчим?!
Back to top
View user's profile Send private message
Ramzes
Участник форума



Joined: 30 May 2004
Posts: 66
Карма: 5
   поощрить/наказать


PostPosted: Sun Jun 06, 2004 6:10 am (спустя 3 месяца 8 дней 14 часов 56 минут)
   Post subject:
Reply with quote

Дмитрий, ваш скрипт подключил, все выполняется и я вижу только пустую табличку. Что делать? У меня в пхп ини все прописано, модуль подключен... Из-за чего такое может быть? Я сделал специально ошибку в пхп ини в его директории и запустил апач... апач упал... т.е. пхп использует файл именно в своей директории. Ну я не знаю в чем проблема... У меня все включено, тем не менее я вижу пустую таблицу.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Jun 07, 2004 12:32 am (спустя 18 часов 22 минуты)
   Post subject:
Reply with quote

BoFFiN wrote:
В Чём дело?!
DBG вроде как несовместим с Zend Optimizer-ом, попробуйте поискать по форуму. Хотя я недавно, кажется, видел рекомендации о том, как их одновременно поставить (вот только где — не помню).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Jun 07, 2004 12:34 am (спустя 1 минуту 37 секунд)
   Post subject:
Reply with quote

Ramzes wrote:
dbg_profile
print_r(dbg_get_profiler_results()) что выдает?
Back to top
View user's profile Send private message Send e-mail
SyVa
Участник форума



Joined: 20 Jun 2003
Posts: 37
Карма: 0
   поощрить/наказать


PostPosted: Mon Jun 07, 2004 6:07 am (спустя 5 часов 33 минуты)
   Post subject:
Reply with quote

Дмитрий установил последний Денвер, ничего не менял в phpinfo() php_dbg подключен, но при использовании профайлера вижу только заголовок таблицы.
print_r(dbg_get_profiler_results()) - выдаёт
Code (any language): скопировать код в буфер обмена
Warning: Wrong parameter count for dbg_get_profiler_results() in ...
:),
а print_r(dbg_get_profiler_results(dbg_profile())) - 0.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Jun 07, 2004 2:05 pm (спустя 7 часов 57 минут)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
dbg_get_profiler_results(&$dbg_prof_results);
print_r (www.php.net/print_r)($dbg_prof_results);
Back to top
View user's profile Send private message Send e-mail
SyVa
Участник форума



Joined: 20 Jun 2003
Posts: 37
Карма: 0
   поощрить/наказать


PostPosted: Mon Jun 07, 2004 9:40 pm (спустя 7 часов 35 минут)
   Post subject:
Reply with quote

Выше функции A() и B(), как в Вашем примере потом этот код
Code (php): скопировать код в буфер обмена
dbg_draw_contexts(dbg_profile());
dbg_get_profiler_results(&$dbg_prof_results);
print_r (www.php.net/print_r)($dbg_prof_results);
выдает шапку таблицы и ниже приведенные пустые массивы
Code (any language): скопировать код в буфер обмена
Array ( [mod_no] => Array ( ) [line_no] => Array ( ) [hit_count] => Array ( ) [tm_max] => Array ( ) [tm_min] => Array ( ) [tm_sum] => Array ( ) )
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Jun 07, 2004 10:10 pm (спустя 30 минут)
   Post subject:
Reply with quote

Очень странно. Попробуйте вот эту dll положить в /usr/local/php/extensions вместо старой.


php_dbg.zip
 Description:

Download
 Filename:  php_dbg.zip
 Filesize:  22.6 KB
 Downloaded:  1249 Time(s)

Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page 1, 2  Next
Page 1 of 2    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML