我正在尝试在装有 php 5.2 的 gentoo 上安装 APC 这是我启动的完整命令:
mkdir /home/APC-php
cd /home/APC-php
wget http://pecl.php.net/get/APC
tar -xzvf APC
cd APC-3.1.9
/usr/local/php5/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php5/bin/php-config
make
make test (i think almost everything failed here)
make install
/etc/init.d/httpd restart
命令make install
显示
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
Installing header files: /usr/local/php5/include/php/
当我执行 make 后,make test
输出是:
=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
APC: apc_store/fetch with strings [tests/apc_001.phpt]
APC: apc_store/fetch with objects [tests/apc_002.phpt]
APC: apc_store/fetch with objects (php pre-5.3) [tests/apc_003.phpt]
APC: apc_store/fetch with bools [tests/apc_004.phpt]
APC: apc_store/fetch with arrays of objects [tests/apc_005.phpt]
APC: apc_store/fetch reference test [tests/apc_006.phpt]
APC: apc_inc/apc_dec test [tests/apc_007.phpt]
APC: apc_cas test [tests/apc_008.phpt]
APC: apc_delete_file test [tests/apc_009.phpt]
APC: apc_store/fetch/add with array of key/value pairs. [tests/apc_010.phpt]
APC: bindump user cache [tests/apc_bin_001.phpt]
APC: bindump file cache part 1 [tests/apc_bin_002.phpt]
APC: APCIterator general [tests/iterator_001.phpt]
APC: APCIterator regex [tests/iterator_002.phpt]
APC: APCIterator chunk size [tests/iterator_003.phpt]
APC: APCIterator regex & chunk size & list [tests/iterator_004.phpt]
APC: APCIterator delete [tests/iterator_005.phpt]
APC: APCIterator formats [tests/iterator_006.phpt]
APC: APCIterator Overwriting the ctor [tests/iterator_007.phpt]
=====================================================================
我已经添加了extension=apc.so
extension_dir/usr/local/lib64/php5/php.ini
是extension_dir = "./"
为了使 apc 加载,我必须将 apc.so 文件放在我的 www 目录中。现在 phpinfo(); 显示它已加载。
问题是apc_store 无法有效地在请求之间存储数据。
$bar = 'BAR';
apc_store('foo', $bar);
var_dump(apc_fetch('foo'));
在一个请求内完成此项工作。
现在如果我尝试执行var_dump(apc_fetch('foo'));
另一个请求,它会打印:
bool(false)
就像 APC 没有在后台运行,但它只在每个请求时启动
这个赏金难道不值得问吗?:(
答案1
从您提供的信息来看,您似乎是从头编译了大部分所需软件包,而不是使用 Gentoo 软件包管理系统 Portage。除非您确切知道自己在做什么,否则采用从源代码安装的方式通常不是一个好主意。虽然 Portage 的默认行为也是从源代码安装软件包,但它有一个高级依赖项管理工具集,可以自动处理大多数复杂的依赖项,并使更新和删除软件包变得非常轻松。
您指定的以下文件和目录位置在典型的 Gentoo 配置中都是非标准的,并且肯定会导致相互依赖的软件包意外失败或崩溃:
/usr/local/lib64/php5/php.ini
/etc/init.d/httpd
/usr/local/php5/bin/phpize
如果这不是生产机器,并且您可以避免停机时间,我建议完全删除 Apache 和 PHP,然后使用 Portage 重新安装它们,如下所示:
安装Apache:
emerge -av www-servers/apache
接下来,您需要安装 PHP,但请务必设置apache2
USE 标志。添加 USE 标志可/etc/portage/packages.use
确保它们将在未来的更新中保留。为 PHP 设置的典型 USE 标志集/etc/portage/packages.use
如下所示:
dev-lang/php apache2 berkdb bzip2 calendar cli crypt ctype curl curlwrappers fileinfo filter ftp gd gdbm hash iconv imap inifile ipv6 json ldap mssql mysql mysqli nls pdo phar posix readline session simplexml snmp soap sockets spell sqlite ssl threads tokenizer truetype unicode xml xmlrpc xsl zip zlib
您应该能够删除我在此示例中提供的大多数 USE 标志,但标志除外apache2
。您的特定要求将决定您需要设置的 USE 标志,但对于将与 Apache 配合使用的 PHP 基本安装,您只需要apache2
设置标志。
现在您已经设置了 USE 标志,您可以继续安装 PHP:
emerge -av dev-lang/php
一旦 PHP 成功安装,您就可以确认它已正确配置为与 Apache 一起工作,方法是打开/etc/conf.d/apache2
文本编辑器并检查以 开头的行是否APACHE2_OPTS
包含指令-D PHP5
。
您现在可以通过调用正确的初始化脚本来启动 Apache:
/etc/init.d/apache2 start
此时启动 Apache 应该没有问题。下一步需要对 PHP 进行一些更改,因此您应该在此期间再次停止 Apache。
Gentoo 将 PHP 配置文件拆分为两个单独的目录,一个用于配置 PHP CLI,另一个用于配置与 Apache 一起使用的 PHP。这些目录如下:
/etc/php/cli-php5/php.ini
/etc/php/apache2-php5/php.ini
根据您安装的 PHP 的具体版本,您的具体路径可能会略有不同。
最后一步是安装 APC,同样使用 Portage:
emerge -av dev-php5/pecl-apc
成功安装 APC 后,您可能需要编辑该/etc/php/apache2-php5/php.ini
文件以检查 APC 是否配置正确,并确保 PHP 在启动 Apache 时加载扩展。检查文件中是否存在以下内容php.ini
:
apc.enabled=1
apc.shm_size=32
APC 配置指令的完整列表如下:PHP 在线文档。
现在您已完成正确配置 Gentoo 环境的 Apache、PHP 和 APC 扩展所需的所有步骤。重新启动 Apache 即可完成。
/etc/init.d/apache2 restart
答案2
我以前也遇到过类似的问题。
尝试将这一行添加到你的 php 配置中
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.shm_size=48
无论如何,你为什么不使用pecl-apc来自 gentoo 的包?