PCRE 在不支持 UTF 的情况下编译

Posted

技术标签:

【中文标题】PCRE 在不支持 UTF 的情况下编译【英文标题】:PCRE is compiled without UTF support 【发布时间】:2012-04-19 17:00:21 【问题描述】:

大家! FreeBSD noobie 寻求一些关于 PCRE 和 Apache 与 mod_php 集成的帮助。

我有什么:

FreeBSD 8.2-RELEASE-p3 Apache/2.2.22(FreeBSD,由端口构建) 带有 Suhosin-Patch (cli) 的 PHP 5.3.10(构建时间:2012 年 4 月 6 日 02:58:27)(不是来自端口)

PCRE 版本 8.30 2012-02-04

Compiled with
  8-bit support only
  UTF-8 support
  Unicode properties support
  No just-in-time compiler support
  Newline sequence is LF
  \R matches all Unicode newlines
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack

php -i | grep -i pcre 告诉我,他使用下面的 PCRE 版本:

Configure Command =>  './configure'  '--with-layout=GNU' 
                      '--localstatedir=/var' '--with-config-file-scan-dir=/usr/local/etc/php' 
                      '--disable-all' '--enable-libxml' '--enable-mysqlnd' 
                      '--with-libxml-dir=/usr/local' '--with-pcre-regex=/usr/local/lib' 
                      '--with-zlib-dir=/usr' '--program-prefix=' '--with-apxs2=/usr/local/sbin/apxs' 
                      '--with-regex=php' '--with-zend-vm=CALL' 
                      '--enable-zend-multibyte' '--prefix=/usr/local' 
                      '--mandir=/usr/local/man' '--infodir=/usr/local/info/' 
                      '--build=i386-portbld-freebsd8.2'
pcre
PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 8.30 2012-02-04
pcre.backtrack_limit => 1000000 => 1000000
pcre.recursion_limit => 100000 => 100000

当我尝试从命令行运行我的 php 应用程序时,一切正常,php < somecode.php

但是当我通过 apache 执行它时,我收到这个错误:Compilation failed: this version of PCRE is compiled without UTF support at offset 0

我尝试使用 --with-pcre=/usr/local/bin 从端口重建 apache,但失败并显示 apache 找不到 pcre-config 脚本的消息。

可能出了什么问题?

【问题讨论】:

看看this answer 的一个非常相似的问题。 @wallyk,谢谢!但这不是我的变种。我已经用 utf 和 unicode 支持重新编译了 PCRE,它在 cli 模式下与 php 一起工作得很好。如果我理解正确的话,我的问题出在 apache pcre-module 中。 您是否检查过 apache 上的 php 是否与命令行中的 php 相同?也许你有第二个版本。还要检查一下,可能安装了两个版本的pcre。 是的,我刚刚检查过了。通过 pkg_info 我只找到了一个php5-5.3.10_1 和一个pcre-8.30_1 你尝试过重建 apache 模块吗? 【参考方案1】:

已解决的问题只是使用系统 pcre 而不是默认重建 apache。为此,请使用--with-pcre 选项构建您的apache,该选项应包含pcre-config 的完整路径,包括pcre-config 本身。就我而言,它是--with-pcre=/usr/local/bin/pcre-config

谢谢大家)

【讨论】:

以上是关于PCRE 在不支持 UTF 的情况下编译的主要内容,如果未能解决你的问题,请参考以下文章

pcre 不支持 utf 的问题

ubantu 下编译安装nginx

如何为 Windows 启用 UTF 8 支持 PCRE xampp?

在没有 sse 的情况下编译 OpenCV 以在 ROS 中使用

在不违反 SRP、OCP、DRY 的情况下编写测试

如何在不超过最大文档大小的情况下编写聚合?