Сбой сайта (фатальная ошибка PHP) при сохранении шаблонов Smarty в HTML-кодере - PullRequest
1 голос
/ 21 июля 2010

У нас довольно большой веб-сайт (~ 400K просмотров страниц в день) и мы используем Smarty в качестве движка шаблонов.HTML-кодировщик меняет шаблоны каждый день, и каждое изменение шаблона (почти каждое) приводит к сбою веб-сайта из-за PHP Fatal error: Call to undefined function _smarty_tplfunc_f0cb5c08ca1726d224308f2f6bd56b4f_0() in ... PS: Да, мы используем $smarty->compile_check, чтобы сразу же увидеть изменения шаблона.мы очищаем весь кеш сайтаЯ не чувствую себя комфортно с этим!

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

Спасибо.

1 Ответ

0 голосов
/ 22 июля 2010

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

Что касается того, почему это происходит каждый раз, подумайте об этом.400 000 просмотров страниц в день == 4,6 запросов в секунду в среднем.Учитывая, что большинство сайтов, которые я когда-либо видел, имеют гораздо больше трафика в определенные часы (в течение дня), я подозреваю, что вы видите свыше 10-20 запросов в секунду.с такой скоростью, если запись файла (из-за загрузки) занимает больше 0,05 секунды, вероятность чтения во время записи резко возрастает.

Таким образом, ваш выбор (в порядке от наиболее надежного до минимального)Вы всегда можете сделать несколько):

  1. Загружать в нерабочее время, когда (надеюсь) трафик ниже ...
  2. Использовать FTP-сервер, который выполняет бит переименования.
  3. Вручную переименуйте файл при загрузке нового.(Важно; переименуйте, чтобы перезаписать оригинал. Не удаляйте и не перемещайте оригинал первым) ...
  4. Взломайте Smarty, чтобы игнорировать новые файлы с отметкой времени менее 10-30 секунд (Просто позвоните filemtime(), чтобы определить, когда он был последний раз изменен. Обязательно сначала наберите clearstatcache(), чтобы не было старое время) ...
...