PHP APC缓存不会保留任何变量

时间:2013-10-17 23:02:06

标签: php apache caching cpanel apc

我必须错过一些明显的东西。我的APC安装正确并显示在phpinfo()就好了。我目前在apache上运行带有APC 3.1.13的php 5.4.20。这是一个cpanel安装,所以请记住这一点。

主要问题是缓存正在运行,但仅限于页面加载的持续时间。如果我跑

<?php
    apc_store('foo', 'bar');
    echo apc_fetch('foo');
?>

它将回显变量,但如果我注释掉apc_store并再次运行代码,则不显示任何内容,var_dump显示boolean(false);

我已经尝试过这段代码,以防万一我做了一些愚蠢的事,这也行不通。它总是显示“从缓存中找不到......保存”

// Check if str found from cache
    if (apc_exists('str')) {
        // Print str from cache
        echo "str from cache: ", apc_fetch('str'), "<br />";
        // Clear cache
        apc_clear_cache('user');
        // Try to fetch str again
        echo "str from cache, after user cache is cleared: ", "<br />";
        var_dump(apc_fetch('str'));
    }
    else {
        // Save str to cache and set ttl 120 seconds
        echo 'str not found from cache...saving', "<br />";
        $str = "This is just test";
        apc_store('str', $str, 120);
    }

我的apc配置如下......

apc

APC Support => disabled
Version => 3.1.13
APC Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>  
Locking type => pthread read/write Locks
Serialization Support => broken
Revision => $Revision: 327136 $
Build Date => Oct 17 2013 16:47:57

Directive => Local Value => Master Value
apc.cache_by_default => Off => Off
apc.canonicalize => On => On
apc.coredump_unmap => Off => Off
apc.enable_cli => Off => Off
apc.enabled => On => On
apc.file_md5 => Off => Off
apc.file_update_protection => 2 => 2
apc.filters => no value => no value
apc.gc_ttl => 3600 => 3600
apc.include_once_override => Off => Off
apc.lazy_classes => Off => Off
apc.lazy_functions => Off => Off
apc.max_file_size => 1M => 1M
apc.mmap_file_mask => no value => no value
apc.num_files_hint => 1000 => 1000
apc.preload_path => no value => no value
apc.report_autofilter => Off => Off
apc.rfc1867 => Off => Off
apc.rfc1867_freq => 0 => 0
apc.rfc1867_name => APC_UPLOAD_PROGRESS => APC_UPLOAD_PROGRESS
apc.rfc1867_prefix => upload_ => upload_
apc.rfc1867_ttl => 3600 => 3600
apc.serializer => default => default
apc.shm_segments => 1 => 1
apc.shm_size => 512 => 512
apc.shm_strings_buffer => 4M => 4M
apc.slam_defense => Off => Off
apc.stat => On => On
apc.stat_ctime => Off => Off
apc.ttl => 0 => 0
apc.use_request_time => On => On
apc.user_entries_hint => 4096 => 4096
apc.user_ttl => 0 => 0
apc.write_lock => On => On

我必须遗漏一些明显的东西......感谢任何帮助。 TIA

修改

所以我查看apc是否在已经安装了apc的prod服务器上正常工作。它实际上是应该工作的。所以我运行php_sapi_name()并在prod服务器上它是apache2handler并且在dev服务器(我正在使用的那个)上,它使用cgi-fcgi,这可能是问题的原因。由于我正在使用cPanel,我应该能够简单地将PHP“Handler”从suPHP更改为DSO,之后它应该可以工作。 prod服务器不使用cpanel,只是很好的旧时尚......呃.....非cPanel的东西让它工作。

2 个答案:

答案 0 :(得分:1)

您需要使用APC Web界面来调试此问题。

找到一个名为apc.php的文件

find / -name apc.php

现在将其复制到www /文件夹并将其加载到浏览器中。

(以下是一个示例:http://andrewdunkle.com/apc.php

现在,重试您的脚本并检查该变量是否已正确存储并且有一个很长的到期日期。 还要测试系统缓存是否在每次页面加载时重置。 (APC.php或您的其他脚本。)

最后,尝试在apache中从worker切换到prefork。 (或者如果你使用prefork则相反)

答案 1 :(得分:0)

我发现这个帖子回答了我的问题。根本问题是当我需要在DSO / mod_php下正确运行APC时,我在CGI-FCGI下运行。在Cpanel上更改它是一个野兽,因为当你将php处理程序更改为失败时,apc.so扩展会导致该部分.... yar。