我的代码部分如下:
while( $pos1 = stripos( $description, '<style' ) ) {
$pos2 = stripos( $description, '</style>' ) + 8;
$description = substr( $description, 0, $pos1 ).
substr( $description, $pos2 ); // <= This string causing the error
}
有时(不是所有的时间!)我收到错误:
致命错误:第88行的/path/to/my/script.php中允许的内存大小为268435456字节(尝试分配107663188字节)
第88行由上面的'&lt; ='箭头表示。
$description
变量的大小约为100 kB。此外,我没有理由相信这段代码会导致内存分配累积而不会被释放。
你看到我的代码中有任何缺陷吗?
答案 0 :(得分:0)
此代码导致内存错误
$description = 'hello<style></style>hello<style>';
while( $pos1 = stripos( $description, '<style' ) ) {
$pos2 = stripos( $description, '</style>' ) + 8;
$description = substr( $description, 0, $pos1 ).
substr( $description, $pos2 ); // <= This string causing the error
}
答案 1 :(得分:0)
看起来问题是由于如果找不到</stile>
这一事实,$description
变量将增长到无穷大。
如果表单<script>
中使用的<script ... />
标记可以显示
现在代码如下:
while( $pos1 = stripos( $description, '<style' ) ) {
$pos2 = stripos( $description, '</style' ) + 8;
if( $pos2 < $pos1 ) $pos2 = strpos( $description, '/>' ) + 2;
if( $pos2 < $pos1 ) break 2;
$description = substr( $description, 0, $pos1 ).
substr( $description, $pos2 );
}
看起来已经没有错误......