часть моего кода является следующее:PHP StrPos и SUBSTR функции вызывает «размер исчерпала разрешено память» ошибку
while($pos1 = stripos($description, '<style')) {
$pos2 = stripos($description, '</style>') + 8;
$description = substr($description, 0, $pos1).
substr($description, $pos2); // <= This string causing the error
}
Иногда (не все время!) Появляется ошибка:
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 107663188 bytes) in /path/to/my/script.php on line 88
88-я линия, обозначенная '< =' стрелкой вверху.
Размер $description
переменная составляет около 100 kB. Кроме того, я не вижу никаких оснований полагать, что этот код может вызвать накопление памяти без их освобождения.
Вы видите недостатки в моем коде?
'StrPos()' не вызывает каких-либо ошибка, это ваш 'substr()', вызывающий ошибку памяти. Зачем? Поскольку вы создаете 3 строки в памяти (помимо исходного '$ description') ... первый substr() будет выделять столько дополнительной памяти, сколько необходимо для создания первой подстроки; второй substr() будет выделять столько дополнительной памяти, сколько необходимо для создания второй подстроки, тогда конкатенация будет выделять столько дополнительной памяти, сколько потребуется для конкатенированных строк, прежде чем назначать $ description. –
@Mark, функция substr может накапливать выделение памяти самим? –
не знают точно, что вы имеете в виду, дополнительная память будет выпущена после выполнения строки кода, но при выполнении этой строки ему нужна дополнительная память –