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

2022-08-30 23:15:28

我有以下工作代码:

$test = '123456';

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

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

但是,当我在代码键盘上执行它时,我收到错误:

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

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

我需要在将来分发我的代码,所以如果它根据某些配置而中断,那将是很糟糕的。那么,密码键盘在其上断裂的原因是什么呢?


答案 1

通过代码板执行的代码在非常受限的环境中运行:

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

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

错误代码代表“PCRE_ERROR_BADOPTION - 无效内容的值”。但是,PHP源中发生错误的代码是使用常量来表示什么。因此,这显然意味着pcre库在密码键盘上被破坏了。rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);

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


答案 2

推荐