我想在我的mac上安装替代PHP缓存(APC)。
对于PECL来说,这应该是一个相当无痛的手术。
所有人需要做的是:
sudo pecl install apc
正如其他人在互联网上报道的那样,apc
依赖于pcre
, PHP兼容的正则表达式库。
pcre
使用fink:
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
因此我有两个问题:
- 是否有一个环境变量,我可以设置指向fink
pcre
库编译apc
? - fink到底把
pcre
放在哪里了?
我看到这个关于Macports的问题:
sudo pecl install apc error on OS x lion
在这个问题中,答案涉及到将所需的pcre
头符号链接到PECL的预期位置。
我尝试了一个类似的解决方案。对于fink方法,这里的symlink命令是:
sudo ln -s /sw/include/pcre.h /usr/include/
但这仍然不起作用。通过PECL安装APC似乎无法找到这个头文件。
我应该补充,确实,pcre.h
头文件在/sw/include/pcre.h
中找到。
我相信我找到答案了
检查期待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
所需的必要头文件在php的fink版本中不可用。幸运或不幸的是,它们可用于包含在mountain Lion中的PHP。这样做的结果是,尽管APC可以编译,但它会被链接到错误的PHP版本。
在用extension=apc.so
更新php.ini
之后,按照apc
安装的结论,将在他们的apache错误文件中发现以下消息。(对于Fink,这是在/sw/var/log/apache2/error.log
):
PHP Startup: apc: Unable to initialize modulenModule compiled with module API=20090626nPHP 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
目录中混淆了东西,这应该给我提示。