ошибка в базе данных сеанса zend для php7

Моему приложению необходимо использовать базу данных вместо файла для управления сеансом . Мое приложение основано на Zend Framework 1.12.17, php 5.6.25 и актуально на wampserver

Это мой config.ini

resources.session.use_only_cookies = true resources.session.gc_maxlifetime = 864000 resources.session.remember_me_seconds = 864000 resources.session.gc_probability = 1 resources.session.gc_divisor = 100 resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable" resources.session.saveHandler.options.name = "app_session" resources.session.saveHandler.options.primary = "id" resources.session.saveHandler.options.modifiedColumn = "modified" resources.session.saveHandler.options.dataColumn = "data" resources.session.saveHandler.options.lifetimeColumn = "lifetime" 

Когда я хочу обновить php до php 7.0.10, возникло предупреждение

Предупреждение: session_write_close (): Не удалось записать данные сеанса (пользователь). Убедитесь, что текущие настройки session.save_path верны (D: \ wamp \ www \ myapp \ top \ session) в папке D: \ wamp \ www \ myapp \ top \ library \ versions \ ZendFramework-1.12.17-minimum \ библиотека \ Zend \ Session.php в строке 732

Я ищу происхождение этой проблемы. У вас есть идея?

большое спасибо

В сентябре 2016 года Zend Framework 1 достигнут EOL (конец жизни). Это означает, что он больше не будет улучшен. Кодовая база слишком старая, чтобы хорошо работать с PHP 7.

Во всяком случае, у вас есть как минимум два варианта:

  1. Переход на или параллельный PHP 5.6 на вашем сервере для поддержки старого приложения ZF1.
  2. Напишите свой собственный обработчик сохранения сеанса, расширив обработчик DbTable, как предлагается здесь .

В дополнение к edigus ответуется вот такая простая реализация расширенного обработчика save:

 <?php require_once 'Zend/Session/SaveHandler/DbTable.php'; // NOTE: To fix an issue with Zend_Session_SaveHandler_DbTable on PHP 7 this class extends it and overrides the write // method to simply always return true. // // See: https://stackoverflow.com/a/44985594/1510754 // See: https://github.com/zendframework/zf1/issues/665 // See: https://github.com/zendframework/zf1/pull/654 class My_Session_SaveHandler_DbTable extends Zend_Session_SaveHandler_DbTable { public function write($id, $data) { parent::write($id, $data); return true; } } 

Проблема написана здесь: https://github.com/zendframework/zf1/issues/665#issue-127528467

Поскольку обновление, которое возвращает 0, но не генерирует исключение, по-прежнему является успешным запросом без ошибок

Следовательно, функция write вернет false вместо true , а PHP 7.0 требует true результата.

Вы можете исправить это, изменив в Zend/Session/SaveHandler/DbTable.php :

if ($this->update($data, $this->_getPrimary($id, self::PRIMARY_TYPE_WHERECLAUSE))) {

Для того, чтобы:

if (is_int($this->update($data, $this->_getPrimary($id, self::PRIMARY_TYPE_WHERECLAUSE)))) {

Или вы также можете удалить if , превратить его в инструкцию и сохранить $return = true; , Потому что при ошибке запрос должен вызвать исключение, поэтому любое update() без исключения является хорошим.