我有以下可用的代码:
$test = '123456';
$int = preg_match('/^\d+$/', $test, $matches);
print_r(array($int, $matches));
然而,当我使用execute it on codepad时,我得到了错误:
警告: preg_match():第5行出现内部pcre_fullinfo()错误
但是代码是在我自己的机器上运行的(代码应该没问题)。
我需要在将来分发我的代码,所以如果它会根据一些配置而崩溃,那将是很糟糕的。那么,codepad中断的原因是什么呢?
发布于 2012-01-14 09:24:16
通过codepad执行的代码在一个非常受限的环境中运行:
代码的执行由基于geordi的主管处理。策略是在ptrace下运行所有东西,许多系统调用不被允许或忽略。编译器和最终可执行文件都是在chroot监狱中执行的,具有严格的资源限制。supervisor是用Haskell编写的。
虽然没什么会破坏正则表达式引擎,但很可能pcre库在内部使用了被codepad环境阻塞的东西。没有生产系统使用如此严格的限制,所以在应用程序中使用该代码应该是安全的。
错误代码代表"PCRE_ERROR_BADOPTION -无效内容的值“。然而,PHP源中出现错误的代码是rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);
,它使用一个常量来表示什么。所以很明显,这意味着pcre库在代码头上被破坏了。
如果您希望完全安全,您可以使用libpcre编写一个小的C程序,以便在同一正则表达式上调用该函数。
https://stackoverflow.com/questions/8859363
复制相似问题