preg_match()在php CLI和mod_php

时间:2018-09-13 12:06:42

标签: php apache pcre

好人。我在script.php文件中有一个基本的正则表达式匹配项。

<?php
  $str = "ABC";
  echo ( preg_match( "|AB(C)|", $str) ) . PHP_EOL; 
?>

当我从命令行执行代码时,按预期,输出为1。

php script.php 
1

现在使用Apache Http作为PHP运行时环境,使用完全相同的参数调用preg_match()

<!DOCTYPE HTML>
<html>
<body>
<?php
$str = "ABC";
   if ( preg_match( "|AB(C)|", $str) ) {
     $res = 'matches';
   } else {
     $res = 'no match';
   }
   echo $res;
?>
</body>
<html>

结果为no match

这怎么可能?显然lddhttpd链接到相同的libpcre版本。

ldd /usr/local/bin/php | grep libpcre
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007faa7e217000)
ldd /usr/sbin/httpd | grep libpcre
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fd9e3c75000)

php -iphpinfo()返回相同版本的PCRE库和配置。

PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 8.38 2015-11-23
PCRE JIT Support => enabled
pcre.backtrack_limit => 1000000 => 1000000
pcre.jit => 1 => 1
pcre.recursion_limit => 100000 => 100000

find / -name libpcre.*返回多个结果:

/usr/lib64/pkconfig/libpcre.pc
/usr/lib64/libpcre.so.1.2.9
/usr/lib64/libpcre.so
/usr/lib64/libpcre.so.1

/usr/lib64/pkconfig/libpcre.pc指向PCRE版本8.41,pcre-config --version也返回该版本。这可能是系统版本。

/usr/lib64/libpcre.so/usr/lib64/libpcre.so.1是指向 /usr/lib64/libpcre.so.1.2.9

我正在运行Apache/2.4.27PHP/7.1.11 操作系统版本为Fedora 24

0 个答案:

没有答案