Проблема
Опубликовал на сайте под управлением CMS Joomla объёмный материал (более 10 тыс. слов). При попытке просмотреть его со стороны fronend получил сообщение об ошибке500 - PHP regular expression limit reached joomla
Решение
PHP выделяет 100 000 байт для использования функций поиска по регулярным выражениям (в формате PCRE). Это ограничение и является причиной ошибки.Необходимо увеличить количество памяти, выделяемое для работы с регулярными выражениями. Требуемый объем памяти зависит от объема обрабатываемого текста.
Я увеличил лимит до 150 000 байт.
За выделяемый для обработки регулярного выражения объем памяти отвечает директива pcre.backtrack_limit из конфигурационного файла php.ini.
Её можно изменить непосредственно редактируя конфигурационный файл php.ini, файл .htaccess либо через команду ini_set из php скрипта. Я выбрал последний вариант, так как доступ к конфигурационным файлам сервера провайдера у меня отсутствует.
В CMS Joomla я поместил команду в файл configuration.php:
ini_set('pcre.backtrack_limit', 150000);
Результат
После изменения конфигурации php ошибка исчезла.PS
А ещё можно разбить большой текст на страницы. Такая возможность реализована во всех версиях Joomla - в текстовом редакторе вставьте "Разрыв страницы".PPS
Если вы часто изменяете конфигурацию через панель управления Joomla (что приводит к потере вручную внесенных в файл configuration.php изменений), то предпочтительным способом является установка директивы через файл конфигурации веб сервера Apache .htaccess.В файл .htaccess, расположенный в корне сайта, необходимо добавить команду:
php_value pcre.backtrack_limit 150000
Самый дебильный способ добавлять эту опцию в configuration.php. Первое же сохранение конфигурации в панели управления Joomla! все затрет.
ОтветитьУдалитьphp.ini на многих хостингах недоступен.
УдалитьВаши предложения?
Директивы php.ini можно изменять также через файл конфигурации веб сервера Apache .htaccess:
Удалитьphp_value pcre.backtrack_limit 150000
у меня в конфиге нету строчки ini_set('pcre.backtrack_limit', 150000) и даже намека на подобное =(
ОтветитьУдалитькак выйти из ситуации в таком случаи?
Строку ini_set('pcre.backtrack_limit', 150000) в конфиг нужно именно добавить.
УдалитьКоманда ini_set позволяет установить(изменить) опции конфигурации для выполняемого php скрипта. (локально, а не глобально для сервера).
Подобная проблема существует если меню сильно разрастается, у меня в меню и подменю было около 1000 пунктов, так столкнулся с такой же проблемой, Убрав некоторые позиции - все обратно запустилось.
ОтветитьУдалить