7

我最近在我的 Lion OS X 64 位上将我的 PHP 升级到了 5.4.1 版,我在 Codeigniter 中遇到了一个错误:

Severity: Warning

Message: preg_match(): Compilation failed: unknown option bit(s) set at offset 0

Filename: core/Utf8.php

Line Number: 44

我用谷歌搜索了这个问题,这似乎是 PHP 中的 PCRE 库的问题,我按照这个教程显示了使用自制软件安装 pcre(我正在运行 pcre 8.30),但这并没有解决问题。

我已经尝试四处寻找解决方案,但我没有遇到一个有帮助的解决方案 - 有没有解决这个 PCRE lib 问题的方法?

编辑:刚刚编辑了这个问题来提醒我我的安装是什么:

./configure \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--sysconfdir=/private/etc \
--with-apxs2=/usr/sbin/apxs \
--enable-cli \
--with-config-file-path=/etc \
--with-libxml-dir=/usr \
--with-openssl=/usr \
--with-kerberos=/usr \
--with-zlib=/usr \
--enable-bcmath \
--with-bz2=/usr \
--enable-calendar \
--with-curl=/usr \
--enable-dba \
--enable-exif \
--enable-ftp \
--with-gd \
--with-freetype-dir=/usr/X11/ \
--with-jpeg-dir=/usr \
--with-png-dir=/usr/X11/ \
--enable-gd-native-ttf \
--with-icu-dir=/usr \
--with-iodbc=/usr \
--with-ldap=/usr \
--with-ldap-sasl=/usr \
--with-libedit=/usr \
--enable-mbstring \
--enable-mbregex \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/var/mysql/mysql.sock \
--with-readline=/usr \
--enable-shmop \
--with-snmp=/usr \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-tidy \
--enable-wddx \
--with-xmlrpc \
--with-iconv-dir=/usr \
--with-xsl=/usr \
--enable-zip \
--with-pgsql=/usr \
--with-pdo-pgsql=/usr \
--with-mcrypt=/usr/local/lib
4

4 回答 4

6

我能够让 PHP 5.4.1 与 PCRE 版本 8.12 一起工作(我相信这是 PHP 5.4.1 中包含的版本)。在问题的评论中列出了所有来回之后,我决定在没有 PCRE 标志的情况下编译 PHP,让 PHP 只使用它的默认值。通过使用默认值,它与 8.12 一起编译。

现在,后续问题当然是为什么会发生这种情况。我仍然希望使用我提供的标志使用 PHP 编译 8.30。但是,在这一点上,我很高兴这件事能正常工作。

以下是我必须使用的配置选项,以防您想从头开始尝试。

./configure \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--sysconfdir=/private/etc \
--with-apxs2=/usr/local/apache/bin/apxs \
--enable-cli \
--with-config-file-path=/etc \
--with-libxml-dir=/usr \
--with-openssl=/usr \
--with-kerberos=/usr \
--with-zlib=/usr \
--enable-bcmath \
--with-bz2=/usr \
--enable-calendar \
--with-curl=/usr \
--enable-dba \
--enable-exif \
--enable-ftp \
--with-gd \
--with-freetype-dir=/usr/X11/ \
--with-jpeg-dir=/usr \
--with-png-dir=/usr/X11/ \
--enable-gd-native-ttf \
--with-icu-dir=/usr \
--with-iodbc=/usr \
--with-ldap=/usr \
--with-ldap-sasl=/usr \
--with-libedit=/usr \
--enable-mbstring \
--enable-mbregex \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/var/mysql/mysql.sock \
--with-readline=/usr \
--enable-shmop \
--with-snmp=/usr \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-tidy \
--enable-wddx \
--with-xmlrpc \
--with-iconv-dir=/usr \
--with-xsl=/usr \
--enable-zip \
--with-pgsql=/usr \
--with-pdo-pgsql=/usr \
--with-mcrypt=/usr
于 2012-04-29T21:14:08.767 回答
3

我通过在我的 Linux 机器上使用更新 PHP 和 PCRE 解决了这个问题yum update

PHP 已更新到版本 5.3.17,PCRE 已更新到版本 8.21-5.3amzn1(我在 Amazon EC2 实例上运行)。

于 2012-10-19T01:36:10.310 回答
0

重新编译httpd。在此之前,请确保您的系统上只有一个版本的 pcre。

于 2012-10-10T20:33:38.237 回答
0

我的解决方案接近@bigZero 的建议。

我无法使其在 brew 上运行,因为当我尝试在 brew 上安装 pcre v8.12 时,这是不可能的,因为它(可能)已从存储库中删除。我的意思是,它显示在brew versions pcre但是当我尝试安装它时无法从ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载

所以我不得不从http://www.pcre.org下载 pcre 8.12 源代码,编译并安装它。我使用了以下配置:./configure --prefix=/usr --enable-utf8 --enable-unicode-properties

我尝试在没有--with-pcre-regex选项的情况下重新编译 php(在我的情况下为 5.4.10)(如 @scott-harwell 所建议的那样。但编译时失败了。比我添加--with-pcre-regex=/usr/的结果,它终于奏效了。

于 2012-12-27T17:27:12.747 回答