【发布时间】:2015-09-14 18:11:00
【问题描述】:
我有以下正则表达式:
preg_match('/function ([[:alpha:]]{1,3})\((.(?!function ))*getKeywordSuggestValue=function/simU', $foo, $matches);
结果页面只是空白(返回空结果)。看起来匹配的块会很大。
500 Server closed connection without sending any data back
Content-Type: text/plain
Client-Date: Fri, 11 Sep 2015 09:35:55 GMT
Client-Warning: Internal response
display_errors 已打开,当我产生解析错误时,它会显示出来。只是没有这个。
preg_match 如何杀死这样的 PHP 脚本?
我使用的是 PHP 5.6
编辑
在尝试使用我找到的 MCVE 和错误消息创建 CLI 脚本时:
Segmentation fault (core dumped)
这是可重现的示例:
<?php
$content = str_repeat('function fo(){ bar; bar; }', 1000) . <<<'EOF'
function cz(h,j,k,l,m,n,o,p,q,r){var x=this;x.setValue=function(a){if(!t.isActive)return;var b=t.Elements.input.value;if(a!=b){t.Elements.input.value=a;}}
x.getValue=function(){if(!t.isActive)return;var a=t.Elements.input.value;a=a.replace(/^\s+/,"").replace(/\s+$/,"");a=a.replace(/\\/g,"");if(a){return a;}else{return null;}}
x.getKeywordSuggestValue=function(){if(!t.isActive)return;var a=t.Elements.input.value;a=a.replace(/^\s+/,"").replace(/[\s ]+/g," ");a=a.replace(/\\/g,"");if(a){return a;}else{return null;}}
EOF;
preg_match('/function ([[:alpha:]]{1,3})\((.(?!prototype\.render=function))*getKeywordSuggestValue=function/simU', $content, $matches);
echo 'preg_match passed';
经过一番研究,我发现了一个可能相关的 PHP 错误 https://bugs.php.net/bug.php?id=45735
现在的问题是如何修复正则表达式以免遇到此错误。
【问题讨论】:
-
在您的
preg_match()电话之后输入:print_r($matches);。 -
检查服务器上的PHP错误日志。
-
@Rizier123:不起作用。 preg_match 之后的步骤永远不会到达。我在 preg_match 之后用
die('hard');验证了这一点。结果相同。 hard 从不显示。 -
@Barmar:什么都没有……
-
@Rizier123:正在努力……