PHP 5.4安装后:preg_match():编译失败:未知选项位设置为偏移0

时间:2012-04-26 17:16:04

标签: php codeigniter pcre

我最近在我的Lion OS X 64bit上将我的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

我用Google搜索了问题,这似乎是PHP中的PCRE库的一个问题,我跟着this tutorial显示我用自制软件安装pcre(我正在运行pcre 8.30)并且这没有解决问题。

我一直在寻找解决方案,但我没有找到一个有帮助的方法 - 是否有解决这个PCRE库问题的方法?

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

./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 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

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

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

答案 2 :(得分: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/并最终工作

答案 3 :(得分:-1)

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