На старом сервере locale -a выдавало много локалей разных, там где-то и cp1251 наверно есть.
На новом сервере locale -a выдавало только 3 штуки и все utf-8.
В файле /etc/locale.gen раскомментировал ru-RU.CP1251, после выполнил команду locale-gen
Команда locale -a вывела в списке и ru-RU.CP1251. После всё заработало, setlocale в php не добавлял
phpinfo() сравнивал, критических изменений не заметил. На новом сервере ioncube доступен еще. Вместо apache php-fpm используется.
И файл и текст в windows-1251 кодировке. Если регистр указать сразу верный - заменяется - это говорит о том, что и текст и регулярка в одной кодировке.
CHECK_PERMISSIONS - если установлен в "Y", то в выборке будет осуществляться проверка прав доступа к информационным блокам. По умолчанию права доступа не проверяются.
1. Почему у вас время жизни кеша 30 секунд? Пока вы проверяете, элементы добавляете у вас кеш сбрасывается не за счет обновления элементов, а просто срок жизни выходит. Ставьте месяц-год срок жизни. Сутки хотя бы
2. У вас 2 компонента с отдельными файлами component.php или это один файл у вас?
3. Как вы определили что кеш сбросился? Как кеш может сброситься, но выборка устаревшая - может он по прежнему из кеша берет данные? Когда в первый раз без кеша заходите - данные какие надо?