Предупреждение: preg_match(): внутренняя pcre_fullinfo()
У меня есть следующий рабочий код:
$test = '123456';
$int = preg_match('/^\d+$/', $test, $matches);
print_r(array($int, $matches));
Однако, когда я выполняю это на кодовой панели, я получаю ошибку:
Предупреждение: preg_match(): внутренняя ошибка pcre_fullinfo() -3 в строке 5
Но код работает на моей собственной машине (и код должен быть в порядке, ИМХО).
Мне нужно распространять свой код в будущем, поэтому было бы плохо, если бы он сломался в зависимости от какой-либо конфигурации. Так в чем причина поломки кодовой панели?
1 ответ
Код, выполняемый через кодовую панель, выполняется в очень ограниченной среде:
Выполнение кода осуществляется супервизором на основе geordi. Стратегия состоит в том, чтобы запускать все под ptrace, при этом многие системные вызовы запрещены или игнорируются. Компиляторы и финальные исполняемые файлы выполняются в изолированной тюрьме со строгими ограничениями ресурсов. Руководитель написан на Хаскеле.
Хотя вы ничего не ожидаете сломать механизм регулярных выражений, вполне возможно, что библиотека pcre использует что-то внутренне, что заблокировано средой кодовой панели. Ни одна производственная система не использует такие строгие ограничения, поэтому вы должны безопасно использовать этот код в своем приложении.
Код ошибки означает "PCRE_ERROR_BADOPTION - значение того, что было недействительным". Тем не менее, код в исходном коде PHP, где происходит ошибка rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);
который использует константу для чего. Таким образом, это ясно означает, что библиотека pcre не работает на кодовой панели.
Если вы хотите быть в полной безопасности, вы можете написать небольшую программу на C, используя libpcre, для вызова этой функции в том же регулярном выражении.