Quicky 0.1

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

WP

^_^
Залил обновление. Поправил как всегда мелкие недочеты, улучшил парсер.

-~{}~ 01.05.07 00:20:

з.ы. залил уточняющий апдейт :)

-~{}~ 01.05.07 14:05:

Еще одно обновление.
PHP:
public $allowed_php_tokens = array('array','isset','empty','is_empty','count', 'sizeof',
							'is_array','is_int','is_float','is_long','is_numeric','is_object',
							'is_scalar','is_string','gettype','is_real',
							'abs','acos','acosh','asin','asinh','atan2','atan','atanh','base_','bindec',
							'ceil','cos','cosh','decbin','dechex','decoct','deg2rad','exp','expm1','floor',
							'fmod','getrandmax','hexdec','hypot','is_','is_','is_','lcg_','log10','log1p',
							'log','max','min','mt_','mt_','mt_','octdec','pi','pow','rad2deg','rand',
							'round','sin','sinh','sqrt','srand','tan','tanh',
							'constant','strlen','time','var_dump','var_export',
							'gmp_*','ctype_*','array_','addcslashes','addslashes','bin2hex','chop','chr',
							'chunk_split','convert_cyr_string','convert_uudecode','convert_uuencode','count_chars',
							'crc32','crypt','echo','explode','fprintf','get_html_translation_table','hebrev','hebrevc',
							'html_entity_decode','htmlentities','htmlspecialchars_decode','htmlspecialchars','implode',
							'join','levenshtein','localeconv','ltrim','md5_file','md5','metaphone','money_format',
							'nl_langinfo','nl2br','number_format','ord','parse_str','print','printf',
							'quoted_printable_decode','quotemeta','rtrim','sha1_file','sha1','similar_text',
							'soundex','sprintf','sscanf','str_ireplace','str_pad','str_repeat','str_replace',
							'str_rot13','str_shuffle','str_split','str_word_count','strcasecmp','strchr',
							'strcmp','strcoll','strcspn','strip_tags','stripcslashes','stripos','stripslashes',
							'stristr','strlen','strnatcasecmp','strnatcmp','strncasecmp','strncmp','strpbrk',
							'strpos','strrchr','strrev','strripos','strrpos','strspn','strstr','strtok',
							'strtolower','strtoupper','strtr','substr_compare','substr_count','substr_replace',
							'substr','trim','ucfirst','ucwords','vfprintf','vprintf','vsprintf','wordwrap');
Подскажите какие функции еще добавить. Требование - функция не должна воздействовать на что-либо внешнее.

-~{}~ 02.05.07 17:19:

Wicked
> это такой новый язык программирования?
Это шаблонная обертка PHP, конечно же, со своими фичами, как и Smarty. Оба этих продукта можно назвать языками программирования.
 

WP

^_^
Теперь
PHP:
public $allowed_php_tokens = array('array','isset','empty','is_empty','count', 'sizeof',
							'is_array','is_int','is_float','is_long','is_numeric','is_object',
							'is_scalar','is_string','gettype','is_real',
							'abs','acos','acosh','asin','asinh','atan2','atan','atanh','base_','bindec',
							'ceil','cos','cosh','decbin','dechex','decoct','deg2rad','exp','expm1','floor',
							'fmod','getrandmax','hexdec','hypot','is_finite','is_infinite','is_nan','lcg_','log10','log1p',
							'log','max','min','mt_getrandmax','mt_rand','mt_srand','octdec','pi','pow','rad2deg','rand',
							'round','sin','sinh','sqrt','srand','tan','tanh',
							'constant','strlen','time','var_dump','var_export',
							'gmp_*','ctype_*','array_*','addcslashes','addslashes','bin2hex','chop','chr',
							'chunk_split','convert_cyr_string','convert_uudecode','convert_uuencode','count_chars',
							'crc32','crypt','echo','explode','fprintf','get_html_translation_table','hebrev','hebrevc',
							'html_entity_decode','htmlentities','htmlspecialchars_decode','htmlspecialchars','implode',
							'join','levenshtein','localeconv','ltrim','md5_file','md5','metaphone','money_format',
							'nl_langinfo','nl2br','number_format','ord','parse_str','print','printf',
							'quoted_printable_decode','quotemeta','rtrim','sha1_file','sha1','similar_text',
							'soundex','sprintf','sscanf','str_ireplace','str_pad','str_repeat','str_replace',
							'str_rot13','str_shuffle','str_split','str_word_count','strcasecmp','strchr',
							'strcmp','strcoll','strcspn','strip_tags','stripcslashes','stripos','stripslashes',
							'stristr','strlen','strnatcasecmp','strnatcmp','strncasecmp','strncmp','strpbrk',
							'strpos','strrchr','strrev','strripos','strrpos','strspn','strstr','strtok',
							'strtolower','strtoupper','strtr','substr_compare','substr_count','substr_replace',
							'substr','trim','ucfirst','ucwords','vfprintf','vprintf','vsprintf','wordwrap','and','or');
dark-demon
Исправил глюк, вечером залью этого не будет.

-~{}~ 17.05.07 23:21:

Спасибо five за сигнал =) Залита новая версия, пофиксен баг.

-~{}~ 18.05.07 06:16:

Еще одно спасибо летит в сторону five. Залита новая версия, в ней добавлены условные операторы вроде is even, и другие штрихи.

Ребята, поактивнее сообщайте о багах и предложениях =) Двигаться проект должен, чем скорее пройдет бета-тест тем скорее в массы уйдет и Веб станет чуточку быстрее ;)

-~{}~ 18.05.07 18:06:

Залил.

-~{}~ 18.05.07 18:54:

Залил.
 

five

Новичок
Ну что ж, перевел со Smarty на Quicky реальный проект.
Все работает.
Спасибо WP за ночное исправление багов ;)

p.s. ссылку на проект давать не буду, а то подумают еще, что это реклама. кому интересно, прошу в личку.
 

Wicked

Новичок
five
и какая скорость получилась на реальных темплейтах? :)
 

WP

^_^
Wicked
В моем реальном проекте, в ~20 раз быстрее на сложных шаблонах, относительно смарти. Но там шаблоны не простые =) А вообще - разговор о скорости в абсолютных значениях нельзя вести без сведений о железе и конкретном тестируемом коде, так что "реальные темплейты" понятие расплывчатое. Лучше всего - сделай замер реального проекта на смарти через ab, потом поставь Quicky, сделай еще одни замеры и сравни результаты, и поделись ;)
Этого же советую остальным, но судя по отзывам тех кто ставил - выигрыш у всех очень недурственный.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>http://whitephoenix.ru/quicky/_test/simple.php - примеры работы

Fatal error: require_once() [function.require]: Failed opening required 'Z:\home\dev\www\dev\quicky\plugins\function.config_load.php'

-~{}~ 19.05.07 14:21:

Я использую смарти через дочерний класс, в котором устанавливаю разные настройки:
Код:
$this->compile_id
$this->template_dir
$this->compile_dir
$this->compile_check
... и т.д.
Какие настройки есть в Quicky?

-~{}~ 19.05.07 14:30:

Код:
Warning occured
File /www/quicky/Quicky.class.php
Line 320
fopen(/www/templates/en/header) [function.fopen]: failed to open stream: No such file or directory

The fatal error occured, sorry.
Как это понимать? Темплейт "header" у меня не выводится и не инклюдится.

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

Quicky - не замена Smarty, он не совместим со Smarty. Это самостоятельный шаблонизатор с удобным синтаксисом. Пока что не для production.
 

WP

^_^
grigori
Ошибку поправил, там я просто залил всю папку и не почистил templates_c.
> Какие настройки есть в Quicky?
Все кроме compile_id, в след. версии будет.
> Как это понимать? Темплейт "header" у меня не выводится и не инклюдится.
У меня такого нет, надо смотреть где идет обращение такое. "The fatal error occured, sorry." - нет такого вообще в скрипте.
> Quicky - не замена Smarty, он не совместим со Smarty. Это самостоятельный шаблонизатор с удобным синтаксисом. Пока что не для production.
Замена. В задумке совместим с основным функционалом, если ты знаешь шаблон который работает в Смарти но не работает в Квики - прошу заносить его в студию.
> Пока что не для production.
Доделки я вношу в тот же день когда мне сообщают о их необходимости, так что скажи конкретно что тебя не устраивает и я исправлю ;)

-~{}~ 20.05.07 12:26:

Во время работы с Quicky на одном из своих серверов нашел баг PHP: http://bugs.php.net/bug.php?id=41448
Если кто-то видел подобные - просьба сообщить.
 

Фанат

oncle terrible
Команда форума
> Какие настройки есть в Quicky?
Все кроме compile_id, в след. версии будет.
а у тебя нет ли статистики - насколько квики стала медленнее после самой первой версии?
жаль. было бы очень любопытно
 

WP

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

-~{}~ 24.05.07 10:04:

С PHP 5.2.2 Quicky не работает по причине Segmentation fault в PCRE 7.0.
'Upgraded PCRE to version 7.0 (Nuno)'

Надо добиваться отката, до исправления бага в PCRE.

-~{}~ 24.05.07 10:19:

залил обновление

-~{}~ 30.05.07 22:09:

залил обновление.
теперь поддерживается
Код:
{helper myhelper ($a,$b)}
{$a}*{$b} = {$a*$b}
{/}
{myhelper(10,15)}<br />
{myhelper b=15 a=10}
/* 10*15 = 150
   10*15 = 150
*/
-~{}~ 30.05.07 22:11:

з.ы. как всегда в обновлении мелкие баги исправлены, что-то добавлено =)
 

ustas

Элекомист №1
Очень даже неплохо, API зафиксировал? Изменений не ожидается?

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

WP

^_^
ustas
Только добавления. Документацию.. хм. По идее годится к Смарти документация, а остальные теги по аналогии. Хотя, конечно, стоит написать.


Товарищи, кто может написать документацию к тегам с примерами?

-~{}~ 31.05.07 15:40:

Описание API и особенностей естественно сделаю я. Было бы здорово если кто-нибудь набросал к тегам элементарную доку.
 

Igor aka TiGR

Новичок
С PHP 5.2.2 Quicky не работает по причине Segmentation fault в PCRE 7.0.
'Upgraded PCRE to version 7.0 (Nuno)'

Надо добиваться отката, до исправления бага в PCRE.
Правда на bugs.php.net все кивают на новые настройки (pcre.backtrack_limit и pcre.recursion_limit) и не хотят убеждаться, что проблема сущствует, и этими параметрами не лечится.

У меня убедить народ не получилось.
 

WP

^_^
Igor aka TiGR
http://bugs.php.net/bug.php?id=41448
Но там сказали что проблема в PCRE 7.0 и ничего они не могут с этим поделать, мол либа внешняя. На их месте я бы откатил до предыдущей рабочей версии PCRE.
Любой segfault - проблема. С любыми настройками, даже заведомо ложными.
Да еще и не передаются POST-параметры octet-stream... в общем я просто откатился на 5.2.1.
 

ustas

Элекомист №1
Начал разбиратся, стиль ужасный, все что в смарти переделывал, тут тоже самое
ну зачем вам всякие _get_auto_filename, все проще может быть

с рабочего проекта, немного переделал
Код:
private function GetFilePath($path, $cache_id, $compile_id)
{
        if ($compile_id === NULL) {
        $compile_id = $this->compile_id;
    }
    if ($cache_id === NULL) {
        $cache_id = $this->cache_id;
    }
    $path = $this->_get_template_path($path);
    
    $ds = $this->use_sub_dir ? DIRECTORY_SEPARATOR : '^';
    $ckey = ''; $cid = '';
    
    if (empty($path)) {
        // обработка ошибки? в лог?
        
    }else{
        $path = urlencode($id);
        $cid  = sprintf('%08X', crc32($path.$cache_id));
        // /home/cachedir/$cid*$id_$ckey.php
     }
    
    if (isset($compile_id)) {
        if (gettype($compile_id) !=='string')
        $compile_id = @serialize($compile_id);
        // /home/cachedir/$cid_($ckey).php
        $ckey = sprintf('%08X', crc32($key));
    }
    
    return $this->cache_dir . substr($cid, 0, 2) . $ds 
            . substr($cid, 0, 3) . $ds 
            . $path .'_'. $cid . '_' .$ckey. '.'. $this->file_ex;
    // поиск glob ("/home/cache/*$ds*$ds*.$this->file_ex"); // удалю или найду все
    //glob ("/home/cache/*.$ds.*.$ds.test*_433d4_4daxax.$this->file_ex"); // удалю или найду по нужной маске
    // в итоге получаю полный контроль за кешем по ключю, ид, по имени (тест1, тесе2) tes*_*_$compile_id -найду все начинающее с tes но с ключом   
}
вообще мне понравилось, но начинающий поймет такую строку
Код:
$name = basename($path).($this->auto_filename_prefix !== '' ? '.'.$this->auto_filename_prefix: '').($compile_id !== ''?'.'.$compile_id:'').($cache_id !== ''?'.'.$cache_id:'').'.'.substr(md5($path),0,6).'.php';
а если я инвалид по зрению? у меня чуть глаза не вывернулись твою мысль отследить.
а ведь присутствуют еще и не такие завороты.

-~{}~ 31.05.07 20:14:

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

WP

^_^
ustas
Предлагаю это обсудить в аське, а не в топике.
> Начал разбиратся, стиль ужасный, все что в смарти переделывал, тут тоже самое
Помоему наоборот.
> вообще мне понравилось, но начинающий поймет такую строку
Строчка элементарная. Покури регулярки компилятора =)
 

ustas

Элекомист №1
метод is_cached
кеш не считывается, а просто проверка есть ли файл. За промежуток времени между проверкой и получением в методе файл может быть удален.

if ($c->is_cache(dfkdfkjdhf)){
display(dfkdfkjdhf) что ли?
}
это конечно теория, но в смарти на это внимание года 2 назад сильно обращали. грабли старые
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху