Есть ли способ использовать unserialize
с ограничением памяти / размера?
В настоящее время у нас есть:
$data = unserialize($_SESSION['visits']);
, и мы иногда получаем:
PHP Неустранимая ошибка: разрешенный объем памяти 134217728 байт исчерпан (попытка выделить 17645568 байт) в Неизвестном в строке 0
, когда посетитель посетил много раз за короткий период время (значение сеанса хранит информацию о каждой посещенной странице).
Если длина $_SESSION['visits']
превышает миллион символов, это вызывает проблему, поэтому я могу выполнить простую проверку, но есть ли лучшее решение, чем это:
if(strlen($_SESSION['visits']) <= 1000000) {
$data = unserialize($_SESSION['visits']);
} else {
$data = array();
}
Я думал, что try catch
может вести себя лучше, но его не поймали:
try{
$data = unserialize($_SESSION['vists']);
} catch(\Exception $exception){
error_log('Caught memory limit');
}
Ответ на этот вопрос - не увеличивать размер памяти.