php-apcu(CGI / FastCGI)apc_fetch总是返回false

时间:2015-08-28 11:53:56

标签: php apache apc

在php CGI环境中使用php-apcu(https://github.com/krakjoe/apcu)扩展名(不是apc)时,来自apc_store的存储数据为空。

任何人都有过如何解决这个问题的经验?

示例PHP文件: test-apc.php

<?php
$k = 'test';
if(isset($_GET['get'])) {
    $result = apc_fetch($k);
    echo "Read entry '$k': $result";
} else if(isset($_GET['clear'])) {
    echo "Clear entry '$k'";
    apc_clear_cache('user');
} else {
    apc_store($k, "HelloWord");
    echo "Write entry '$k' set";
}
print_r(apc_cache_info('user'));
?>

重现的步骤:

  1. 打开http://server/test-apc.php致电apc_store
  2. 使用http://server/test-apc.php?get
  3. 打开apc_fetch以接收存储的数据

    BTW: apc_cache_info('user')在第一次请求时正确显示,第二次为空

    相关软件包(操作系统:Debian 3.2.63):

    • Apache 2.2.22(mpm-prefork,suexec-custom,wrapper)
    • php5.5 as CGI
    • php5-apcu 4.0.7
    • (和依赖关系)

1 个答案:

答案 0 :(得分:1)

模块php-apcu与CGI / fcgid不完全兼容。

可能的原因: CGI / fcgid在每个HTTP REQUEST上执行php解释器作为新实例。所以apcu / apc无法恢复用户缓存。

模块 mod-fastcgi Debian的非免费软件包)和 php5-fpm 可以提供补救措施。 它使用不同的技术来管理流程。

http://php-fpm.org/wiki/(at atm - 2015-09-02)