Preg_match () отличается на php CLI от mod_php

Ребята добрые. У меня есть базовое совпадение регулярного выражения в файле script.php.

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

Когда я выполняю код из командной строки, как и ожидалось, на выходе получается 1.

php script.php 
1

Теперь вызываем preg_match() с точно такими же аргументами, используя Apache Http в качестве среды выполнения PHP:

<!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.

Как это возможно? Очевидно, ldd и httpd связаны с одной и той же версией 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 -i и phpinfo() возвращают одну и ту же версию библиотеки PCRE и config.

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.27 и PHP/7.1.11 Версия ОС - Fedora 24.

Работает нормально на песочница php

James 13.09.2018 14:19

Установка pcre.jit=0 устранила проблему.

Eduard 13.09.2018 18:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
97
0

Другие вопросы по теме