Понял. Да, действительно в блоке. Спасибо!
Все, разобрался. У тебя этот код где-то в блоке находится? ( {block name=someblock}… {/block} ). У меня было это в блоке, и из-за этого рекурсия бесконечная и была. Здесь появляется логика в плане бесконечной подгрузки шаблона. Блок — это отдельная очень хитрая сущность, которая может расширяться, и в которой могут быть и другие блоки. Вот для того, чтобы быть «в курсе» по всем внутренним блокам, Smarty выполняет обход всех вложений {include file=} без учета всяких условий и т.п. (просто чтобы полностью скомпиллировать блок) (без условий — это в общих чертах). И так как там шаблон вызывает предыдущий шаблон, то и происходит бесконечная рекурсия. То есть память выжирается не на уровне выполнения процессора, а на уровне прекомпилляции шаблона. Если у тебя менюшка находится в блоке и обязана там быть, то лично я эту проблему обошел за счет сниппета. То есть Смарти-код с процессором менюшки и т.п. вынес в отдельный шаблон, который вызывается сниппетом, а в блоке прописал этот сниппет {snippet name=menu}. В результате при прекомпилляции блока Smarty не выполняет этот сниппет и не зацикливается без дела. Все нормально работает.
Как можно проверить изолированы сайты или нет?
На самом деле очень странное поведение. С этим тоже столкнулся на новом сайте. При чем что интересно — оба сайта на modxcloud.com, оба сделаны одинаково, но косяк лезет только на одном сайте. Потребление памяти связано с бесконечной рекурсией. Почему-то даже тогда, когда условие if не выполняется в шаблоне row.tpl, все равно (видимо на уровне прекомпилляции) вызывается шаблон outer.tpl Короче какая-то нелогичная фигня получается. Сейчас копаю. Как раскопаю, отпишусь.
В sshd_config прописано ChrootDirectory Это не позволяет подняться выше по ssh, но если на сайтах права 775 и 664, то это позволит их просматривать от имени других пользователей. То есть сайт один взломали, и можно пролистать файлы других сайтов. И пусть нет возможности что-то туда записать, зато можно прочитать config-файл и увидеть логины/пароли в БД, а далее просто создается юзер для целевого сайта и спокойно входим в админку. Сессия как обычно отвалилась, но все стало как надо. Смотрите в вапоре скрипт import.php С его помощью можно запускать импорт через ssh. vapor/import.php package=core/packages/package.transport.zip (само собой имя своего пакета). Здесь не будет проблем с сессиями и т.п., так как они не требуются. Можно будет увеличить время выполнения и накатить даже очень большой снапшот.
Николай, добрый вечер. Сегодня впервые пытаюсь сделать многоуровневое меню с вложенными шаблонами (как в топике). Выдает такую ошибку: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 130968 bytes) in /.../smarty_internal_templatecompilerbase.php on line 2261 (номер строки меняется). Если делаю вызов outer.tpl -> row.tpl -> outer2.tpl -> row2.tpl, то все работает. Но стоит вызвать outer.tpl из row.tpl или row.tpl из outer2.tpl, то появляется эта ошибка. Что может быть? Неужели так много памяти требуется?!
Работает nginx+php5-fpm. Апач не используется. В статье написано «запуск разных сайтов от разных юзеров». nginx работает под www-data. php-fpm под индивидуальным пользователем для каждого сайта. По sftp работаю так же под пользователем — владельцем папки с сайтом, т.е. для заливки файлов на разные сайты использую разные логины. Папка с сайтом — это домашняя папка пользователя. В sshd_config прописано ChrootDirectory. Vapor этот. Устанавливал через управление пакетами. Сессия как обычно отвалилась, но все стало как надо. Делал несколько раз. Ни единого разрыва.
При закачке файлов по sftp не возникает проблем с правами/владельцем. Вот про этот момент можно чуть подробней? От чьего имени работает веб-сервер, и от чьего имени вы по sftp работаете и есть ли какая-то автоматическая смена прав на файлы или типа того? И я так понимаю, идет связка nginx+fastcgi? Апач не используется? И все сайты не изолированы друг от друга? То есть если зайти в админку одного сайта, то через него можно добраться до любого другого сайта? (то есть не используется open_basedir или типа того? Про это я писал здесь.) Пакет сделанный с modxcloud через vapor стал без проблем. Использовали этот Vapor? И использовали входящий в него import.php, или просто устанавливали как обычный пакет через менеджер пакетов?
а кешер включен? мой тест был с включеным apc. без кешера гдето 5-5.5 Mb