Сохранение конфигурации в 5.7 (PHP 5.5)

Любая помощь по установке/настройке/модификации concrete5

Сохранение конфигурации в 5.7 (PHP 5.5)

Сообщение cmsservice » 06 окт 2014, 11:47 ,  »  Сообщение:#1

Столкнулись с одной не очень понятной проблемой: при попытке сохранить настройки в 5.7 (например кеширование) они не сохраняются.

Анализ показал что в процессе сохранения настроек кеширования (и не только, например с отладкой то же самое) происходит последовательное сохранение в файле конфигурации /application/config/generated_overrides/concrete.php заданных значений.

При этом алгоритм сохранения устроен так:
  1. загружается файл конфигурации (это массив php), в который будет сохраняться параметр;
  2. в загруженном массиве ищется параметр и меняется его значение, если же параметра нет, то добавляется;
  3. файл сохраняется на диск.
Так вот, после сохранения первого параметра мы его видим в файле на диске, после сохранения первого параметра в файл, мы также его видим в файле, но первого там уже нет. При сохранении третьего, также пропадает второй и т.д. Может быть кто-то сталкивался уже с такой проблемой? Пытаюсь понять это у нас проблема или стоит уже багу зарепортить, да и приступить к поиску решений.

PS: Вообще в коде множество проблем, множество E_NOTICE и E_STRICT. Например, при попытке получить значение $_POST используя метод контроллера post(), система улетает в собственный обработчик ошибок с E_NOTICE поскольку метод Request::post не объявлен статическим, естественно нужное нам значение мы не получаем. К промышленной эксплуатации система пока не готова, печаль :(
С уважением, Константин
http://Переделка-сайтов.РФ
Индивидуальные решения на платформе Concrete5 для театров и производственно-торговых компаний.
Аватара пользователя
cmsservice
 
Сообщения: 763
Зарегистрирован: 10 окт 2010, 00:10
Откуда: Москва

Re: Сохранение конфигурации в 5.7 (PHP 5.5)

Сообщение Count_Raven » 06 окт 2014, 17:19 ,  »  Сообщение:#2

Пока особо не заморачивался, поэтому не могу ничего сказать по данному вопросу.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Сохранение конфигурации в 5.7 (PHP 5.5)

Сообщение cmsservice » 16 окт 2014, 18:12 ,  »  Сообщение:#3

Проверили на 5.4, - все ок.
Таким образом в PHP 5.5 Concrete5 5.7 не полностью работоспособна. Почему, придется еще разобраться.
С уважением, Константин
http://Переделка-сайтов.РФ
Индивидуальные решения на платформе Concrete5 для театров и производственно-торговых компаний.
Аватара пользователя
cmsservice
 
Сообщения: 763
Зарегистрирован: 10 окт 2010, 00:10
Откуда: Москва

Re: Сохранение конфигурации в 5.7 (PHP 5.5)

Сообщение cmsservice » 16 окт 2014, 23:52 ,  »  Сообщение:#4

Проблема обнаружена!

Дело в том, что в PHP 5.5 включена система кеширования байткода OPcache. А так как конфигурация в 5.7 хранится в php фйлах, а не в БД (как в 5.6), то при последовательном сохранении нескольких значений в настройках он просто не успевает понять что файл был изменен и всегда отдает первоначальную версию конфига. В итоге имеем коллизию. По этому поводу даже есть бага
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку


Решается проблема либо принудительным отключением OPcache в php.ini (плохой способ), либо внесением изменений в метод save класса Concrete\Core\Config\FileSaver с целью перечитывания кэша. Например, в конце метода инлайновый возврат результата заменить на такой код:
Код: Выделить всё
$retval = $this->files->put($file, $rendered) !== false;
if(
function_exists('opcache_invalidate')) opcache_invalidate($file);
return $retval; 


Завтра зарепорчу багу в багтрекер Concrete5.
С уважением, Константин
http://Переделка-сайтов.РФ
Индивидуальные решения на платформе Concrete5 для театров и производственно-торговых компаний.
Аватара пользователя
cmsservice
 
Сообщения: 763
Зарегистрирован: 10 окт 2010, 00:10
Откуда: Москва

Re: Сохранение конфигурации в 5.7 (PHP 5.5)

Сообщение Count_Raven » 17 окт 2014, 15:26 ,  »  Сообщение:#5

Спасибо за информацию. Учтём.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Сохранение конфигурации в 5.7 (PHP 5.5)

Сообщение cmsservice » 17 окт 2014, 15:35 ,  »  Сообщение:#6

В коде, который скоро станет 5.7.1 уже внесены изменения, но там ИМХО они криво сделали, типа если файл есть, то сохраняют конфиг во временный файл, потом из него грузят в объект и временный файл убивают.
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку


Я думаю значительно продуктивнее и быстрее определить что opcache присутствует в исполняющей среде и вызвать очистку кэша для отдельно взятого файла.
С уважением, Константин
http://Переделка-сайтов.РФ
Индивидуальные решения на платформе Concrete5 для театров и производственно-торговых компаний.
Аватара пользователя
cmsservice
 
Сообщения: 763
Зарегистрирован: 10 окт 2010, 00:10
Откуда: Москва


Вернуться в Помощь по concrete5

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron