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

时间:2012-01-14 01:21:49

标签: php regex codepad

我有以下工作代码:

$test = '123456';

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

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

然而,当我execute it on codepad时,我收到错误:

  

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

但代码在我自己的机器上运行(代码应该没问题)。

我需要在将来分发我的代码,所以如果它会因某些配置而中断会很糟糕。那么键盘打破它的原因是什么?

1 个答案:

答案 0 :(得分:30)

通过键盘执行的代码在非常有限的环境中运行:

  

代码执行由基于geordi的主管处理。策略是在ptrace下运行所有​​内容,不允许或忽略许多系统调用。编译器和最终可执行文件都在chroot jail中执行,具有严格的资源限制。主管是用Haskell编写的。

虽然你不希望打破正则表达式引擎,但是pcre库很可能在内部使用被键盘环境阻止的东西。没有生产系统使用这种严格的限制,因此您应该可以安全地在您的应用程序中使用该代码。

错误代码代表“PCRE_ERROR_BADOPTION - 无效的值”。 但是,发生错误的PHP源代码是rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);,它使用 what 的常量。所以它显然意味着pcre库在键盘上被破坏了。

如果你想要完全安全,可以使用libpcre编写一个小程序,在同一个正则表达式上调用该函数。