警告:preg_match():内部pcre_fullinfo()

17

我有以下可用的代码:

$test = '123456';

$int = preg_match('/^\d+$/', $test, $matches);

print_r(array($int, $matches));

然而,当我在codepad上运行它时,我遇到了以下错误:

警告:preg_match():第5行的内部pcre_fullinfo()错误-3

但是,这段代码在我的本地机器上运行良好(我认为应该没有问题)。

我未来需要分发我的代码,如果它因某些配置而崩溃将会很糟糕。那么,codepad出现错误的原因是什么?

1个回答

30

通过codepad执行的代码将在一个非常受限制的环境下运行:

代码执行由基于geordi的监管者处理。策略是在ptrace下运行所有内容,并禁止或忽略许多系统调用。编译器和最终可执行文件都在一个chroot监狱中执行,有严格的资源限制。监管者是用Haskell编写的。

虽然它并不会出现你期望中的正则表达式引擎故障,但pcre库很可能使用了一些被codepad环境屏蔽的内部东西。没有生产系统使用如此严格的限制,所以您可以放心地在您的应用程序中使用该代码。

错误代码代表"PCRE_ERROR_BADOPTION-what的值无效"。然而,PHP源代码中发生错误的代码是rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);,其中“what”使用常量。因此,这明显意味着pcre库在codepad上已经损坏了。

如果您想要完全安全,您可以编写一个小型C程序,使用libpcre调用相同的正则表达式函数。


是的,这个答案似乎仍然适用。我发现http://sandbox.onlinephpfunctions.com能够执行代码。 - Christiaan van Bergen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接