powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Smarty на старой версии php
10 сообщений из 10, страница 1 из 1
Smarty на старой версии php
    #37943772
Konsul117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!
У меня возникла проблема с совместимостью шаблонизатора Smarty со старыми версиями php. В своём проекте использую Smarty 3. У него требования к php - версия, как минимум, 5.2. На локальном сервере, на котором разрабатываю - версия 5.2, так что всё работает отлично. На production-версии фирмы php очень стар - 5.0.2. Удивительно, но до сей поры (а проект крутится там уже 3ий год) никаких проблем с версиями не было. До последней поры.
Суть вот в чём. Задумал я сделать свои функции в smarty. Всё получалось хорошо, всё работает. Как стал заливать на рабочий сервер - полезли ошибки:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Fatal error: Uncaught exception 'Exception' with message 
'Syntax Error in template "C:/Inetpub/***/intra/lcms-test/tpl/templates/main_blocks/index_main.tpl" on line 17 " 
{tooltip id=3 display="inline-block"}{/tooltip}" unknown tag "tooltipclose"' in 
C:\Inetpub\***\intra\lcms-test\libs\smarty\sysplugins\smarty_internal_templatecompilerbase.php:398 
Stack trace: #0 C:\Inetpub\***\intra\lcms-test\libs\smarty\sysplugins\smarty_internal_templatecompilerbase.php(398): 
Smarty_Internal_TemplateCompilerBase::trigger_template_error() #1 
C:\Inetpub\***\intra\lcms-test\libs\smarty\sysplugins\smarty_internal_templatecompilerbase.php(227): 
Smarty_Internal_SmartyTemplateCompiler->trigger_template_error('unknown tag "to...', 17) #2 
C:\Inetpub\***\intra\lcms-test\libs\smarty\sysplugins\smarty_internal_templateparser.php(2196): 
Smarty_Internal_SmartyTemplateCompiler- in 
C:\Inetpub\***\intra\lcms-test\libs\smarty\sysplugins\smarty_internal_templatecompilerbase.php on line 398


Т.е. у меня добавлена блоковая функция tooltip, которая содержащийся код между тегами {tooltip id='%id%'} и {/tooltip} оборачивает div-ом и добавляет в него параметр, содержащий некую всплывающую подсказку, которая загружается этой функцией через указанный id. На всякий случай приведу код этой функции:
block.tooltip.php
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
require_once $serv_base_dir."libs/lcms_cache.php";
function smarty_block_tooltip($params, $content, $smarty, &$repeat) {
    if(!isset($params['id']))
        return $content;
    
    $tooltip_text = lcms_tooltips::get_tooltip((int)$params['id']);
    
    if($tooltip_text === false)
        return $content;
    
    $style = '';
    if(isset($params['display']) && in_array($params['display'],array(
        'block','inline-block'
    ))) {
        $style .= 'display:' . $params['display'] . ';';
    }
    
    if($style != '')
        $style = ' style="' . $style . '"';
    
    $tooltip_text = addslashes(htmlspecialchars($tooltip_text));
    
    return '<div class="lcms_tooltip" tooltip="' . addslashes(htmlspecialchars($tooltip_text)) . '"' . $style . '>' . $content . "</div>";
}



Так вот, на сервере разработки (Apache 2.2, php 5.2.17) всё работает, как надо, а на production-сервере (IIS 6.0, php 5.0.3) вылезает вышеприведённая ошибка на каждом попадающемся в шаблонах теге {tooltip}. Пробовал на другом сервере (примерно такой же конфигурации, как и мой dev-сервер) - всё так же отлично работает. Значит, дело всё-таки в версии php. Хотя, странно, что эта несовместимость версий проявилась только на плагинах. Кстати, пробовал использовать встроенные плагины smarty (которые так же лежат в папке plugins, но были там изначально) - так же возникает ошибка на production.
Просьба помочь. Кто знает, действительно ли проблема в версии php? И можно ли как-то устранить ошибку, заставить таки работать смарти на этом древнем пхп? Проблема в том, что администрация production-сервера в фирме очень неповоротлива и заставить её обновить серверное ПО довольно проблематично. Они там ещё держат свой сайт (тоже довольно древний) и говорят, что если обновят - то полезут ошибки типа deprecated и ничего работать не будет (вроде как раньше пробовали и забили на это дело).

Посоветуйте, плз, что проще сделать? Таки допилить смарти (не знаю как, шаблонизатор этот весьма сложен и велик для таких работ) или всё же дальше долбать начальство по поводу апгрейда?

Заранее благодарен!
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37943779
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уволить админов.

авторошибки типа deprecated и ничего работать не будет
Это не ошибки, а всего лишь уведомления, работать все должно нормально, уведомления можно отключить. (по идее они на продакшен сервере вообще не должны быть включены)

Конкретно по самой ошибке - могу только предположить, что не должным образом обрабатывает данные какая-то из регулярок... других догадок пока нет.
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37943796
Konsul117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HettУволить админов.

авторошибки типа deprecated и ничего работать не будет
Это не ошибки, а всего лишь уведомления, работать все должно нормально, уведомления можно отключить. (по идее они на продакшен сервере вообще не должны быть включены)

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

Да понятно, что уволить. У нас фирма - университет, гос. контора и всё прочее, что с этим связано. Я, конечно, добьюсь своего рано или поздно. Но работать должно в самое ближайшее время :(

Так дело в том, что уведомления - фиг бы с ними. Они итак отключены. Там, судя по всему, какие-то функции просто не работают. Вот что мне написал один из администраторов:

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

Текущая версия сайта содержит множество разделов, написанных более чем 4 года назад и обновление PHP приведет к сотне ошибок в используемых функциях, которые получали статус deprecated начиная с версии 5.1.

Ага, другой шаблонизатор использовать. Шутники, одним словом.

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

По смарти. Попробовал поискать в нём функции регулярок, нашлась одна функция mb_ereg_replace и 39 штук preg_replace, 53 preg_match. Но навскидку не получается оценить, в какой их них косяк. Все они поддерживаются версией 5.0.
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37943810
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да понятно что поддерживаются, просто версия библиотек отвечающих за их обработку - разные, какая-то старая версия возможно не корректно понимает какой-то паттерн.

Сделайте debug_backtrace, возможно удастся понять в каком именно месте происходит не верная обработка.
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37943812
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на счет регулярок - это только предположение.
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37943886
Konsul117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, попробую.
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37944054
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konsul117,

поройдитесь отладчиком пошагово, там и поймете какой код и при каких переменных не работает. выложите его минимал и тут уже решим что с ним делать.
зы. попробуйте юзать Quicky может он вам подойдет?
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37967717
Konsul117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, решил написать свой модуль, который будет обрабатывать хуки вида
[tooltip id=1]...code...[/tooltip]
С отладчиками повозился, но не разобрался(
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37968053
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем это вообще?
...
Рейтинг: 0 / 0
Smarty на старой версии php
    #37968791
Konsul117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я так назвал это дело - "хуки". Т.е. сделал свою реализацию того, что хотел сделать в плагине смарти (см. начало топика).
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Smarty на старой версии php
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]