【问题标题】:Installing Alternative PHP Cache using PECL and Fink使用 PECL 和 Fink 安装替代 PHP 缓存
【发布时间】:2025-11-25 10:55:01
【问题描述】:

我想在我的 Mac 上安装备用 PHP 缓存 (APC)。

对于 PECL,这应该是一个相当轻松的操作。

只需:

sudo pecl install apc

正如其他人在互联网上报道的那样,apc 依赖于 PHP 兼容的正则表达式库 pcre

现在我已经使用 fink 安装了最新版本的 PHP 和 PEAR/PECL。我还使用 fink 安装了pcre

i   pcre                     8.21-2             Perl Compatible Regular Expressions Library

问题是,当尝试使用sudo pecl install apc 时,pecl 正在检查pcre 库的默认目录,而不是查看/sw

cc -D_GNU_SOURCE -I. -I/private/tmp/pear/temp/APC -DPHP_ATOM_INC -I/private/tmp/pear/temp/pear-build-rootPtlYda/APC-3.1.13/include -I/private/tmp/pear/temp/pear-build-rootPtlYda/APC-3.1.13/main -I/private/tmp/pear/temp/APC -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /private/tmp/pear/temp/APC/apc.c  -fno-common -DPIC -o .libs/apc.o
In file included from /private/tmp/pear/temp/APC/apc.c:45:
/usr/include/php/ext/pcre/php_pcre.h:29:10: fatal error: 'pcre.h' file not found
#include "pcre.h"
         ^
1 error generated.
make: *** [apc.lo] Error 1
ERROR: `make' failed

因此我有两个问题:

  1. 是否可以设置一个环境变量来指向 fink pcre 库以编译 apc
  2. fink 到底把pcre 放在哪里了?

更新

我看到这个关于 Macports 的问题:

sudo pecl install apc error on os x lion

在这个问题中,答案涉及将所需的 pcre 标头符号链接到其预期的 PECL 位置。

我尝试了类似的解决方案。对于 fink 方法,这里的符号链接命令是:

sudo ln -s /sw/include/pcre.h /usr/include/

但这仍然不起作用。通过PECL安装APC好像找不到这个头文件。

我应该补充一下,pcre.h 头文件确实在 /sw/include/pcre.h 中。

【问题讨论】:

    标签: php header-files apc pecl fink


    【解决方案1】:

    我相信我找到了答案。

    检查期待 pcre.h (/usr/include/php/ext/pcre/php_pcre.h:29) 的文件我看到了这个:

    #include "pcre.h"

    也许有一种方法可以在 PECL 安装期间添加包含路径,但我不知道该怎么做。

    然后我的解决方案是简单地将指向pcre.h 的符号链接放在包含这个有问题的源文件的目录中。像这样:

    sudo ln -s /sw/include/pcre.h /usr/include/php/ext/pcre/

    做到了。也许人们有更优雅的方法来做到这一点,但对于其他有这个问题的人来说,这应该可以完成工作。

    非常重要的更新

    实际上,我应该注意,我的上述信息不完整,不会起作用。

    问题是,一定要先安装fink包php5-dev

    坦率地说,我认为应该使 fink 包 php-pear 具有 php5-dev 作为依赖项。它没有,而且我目前不熟悉维护 fink 包,所以必须这样做。

    没有这个包的后果就是编译APC时所需的头文件在fink版本的php中不可用。幸运或不幸的是,它们可用于包含 PHP 的 Mountaion Lion。这样做的后果是,虽然 APC 会编译,但它会链接到错误的 PHP 版本。

    按照apc 安装结束的指示,将php.ini 更新为必需的extension=apc.so 后,将在其apache 错误文件中找到以下消息。 (对于 Fink,这是/sw/var/log/apache2/error.log):

    PHP Startup: apc: Unable to initialize module\nModule compiled with module API=20090626\nPHP    compiled with module API=20100525
    

    解决这个问题的方法是简单地sudo pecl uninstall apc,然后执行sudo fink install php5-dev,最后执行sudo pecl install apc

    apc 的最终安装将使用php5-dev 添加的包含文件,一切都会好起来的。

    那么您就可以放心地将extension=apc.so 添加到/sw/etc/php5/apache2/php.ini

    还有一件事

    另请注意,我上面关于符号链接pcre.h 文件的说明必须稍微修改为:

    sudo ln -s /sw/include/pcre.h /sw/include/php5/ext/pcre

    pecl 正在搞乱/usr 而不是/sw 目录中的东西这一事实应该对我有所了解。

    【讨论】: