遇到PHP函数preg_match_all,的BUG求救

hzbigdog 2009-09-03 09:21:18
我前些日子在 php5.2.0 下面写了一个程序,因为需要,需要大量使用preg_match_all的正则方式对文本进行处理。
搞好后传后虚拟主机上(php5.2.6),结果一跑到preg_match_all函数php就崩溃,apach直接报错,终止。

我看了一下,如果我在preg_match_all中用简单的正则问题不大,一用复杂点的正则,还有处理的数据包一大,就会出现这个问题,我处理的数据包如果是1-2K问题不大,再大一点的就会出错。

我用的正则:$sRule = '/(<table(?:.(?<!<table))*首\s*页.*?<\/table>)/ism';实际上这个也不是很复杂。

后来我在本机装了php5.3.0,结果也同样,运行的时候跑到preg_match_all,apach就会意外终止,只有在php5.2.0上跑才正常。

我网上查了一下关于preg_match_all的Bug方面的资料,看到有人遇到过类似问题,说是preg_match_all这个函数堆栈太小导出出错:http://jackywdx.cn/2009/05/solution_to_segmentation_fault_using_preg_match_all/

但是我不知道在windows上怎么处理,他这个是在unix上的处理方式。

有人知道怎么处理这个问题吗?

求救了。

<?php
function loadf($sFilePath)
{
$hdlSrc = @fopen($sFilePath, 'rb');//源文件链接
if ($hdlSrc == false)
return null;//源文件最终打开失败
else
{
$aBuf = array();
while(!feof($hdlSrc))
$aBuf[] = fread($hdlSrc, 8*1024);//写入读取到的数据
fclose ($hdlSrc);

return join('', $aBuf);//输出文件内容
}
}

$sTmp = loadf('9c3bb7bb57c872253a821798fcdc1a07.html');
$sRule = '/(<table(?:.(?<!<table))*首\s*页.*?<\/table>)/ism';
echo strlen($sTmp);

if(preg_match_all($sRule, $sTmp, $aResult, PREG_PATTERN_ORDER))/*就是这个地方apach意外终止的*/
print_r($aResult);
else
echo '没有过滤';
?>

...全文
436 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cccc_cc 2009-09-04
  • 打赏
  • 举报
回复
http://www.tctd.cc/bbs/viewthread.php?action=printable&tid=5485

这是原文地址。
cccc_cc 2009-09-04
  • 打赏
  • 举报
回复
我两一样的,去看我的帖子。跟你的一样的问题。
http://topic.csdn.net/u/20090904/18/cf36b4ce-fbb6-4533-9f24-56e9ebb307a3.html?seed=616806743&r=59572892#r_59572892

我的PHP 5.2.0不行。照样出错。我找了一些帖子。说是要修改pcre的堆栈大小。

[Pcre]
pcre.recursion_limit=10000000
pcre.backtrack_limit=10000000

这是我修改后的值,原本是 100000 呵呵。试试看吧。
mrshelly 2009-09-04
  • 打赏
  • 举报
回复
没看明白你倒底要用正则完成什么样的数据 抽出...

有些功能可以用 php 语言完成的,尽量用PHP完成.没有必要都用正则来一次性完成..

CunningBoy 2009-09-03
  • 打赏
  • 举报
回复
Windows下可以使用EditBin修改堆栈大小,下面是参考:
http://msdn.microsoft.com/en-us/library/xd3shwhf%28VS.80%29.aspx
hzbigdog 2009-09-03
  • 打赏
  • 举报
回复
唉,太复杂了,呵呵。
我还是装回php5.2.0了,这个版本是正常的

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧