APC不记得来自CLI

时间:2017-03-11 19:29:18

标签: php apc

我正在使用以下命令设置APC缓存数组:

apc_add( 'ips', $ips );

通过命令行。可以使用以下命令检索此缓存的数组:

apc_fetch( 'ips' )

在同一个剧本中。

但是,无法从后续的CLI脚本或Apache调用的PHP访问它。虽然我可以在Apache运行的脚本之间调用变量。

我正在运行:5.4.6-1ubuntu1.8并启用APC:

apc.enable_cli=1

在我的本地PC上,我正在使用带有PHP7的APCU,并且不会出现此问题。

设定:

apc.cache_by_default => On => On
apc.canonicalize => On => On
apc.coredump_unmap => Off => Off
apc.enable_cli => On => On
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 => 32M => 32M
apc.shm_strings_buffer => 4M => 4M
apc.slam_defense => On => On
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

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

是的,这是apc.enable_cli = 1参数的一个令人困惑的方面。它表明你可以获得类似于apache模块的行为方式。

但是,对于cli,有一个进程而没有共享状态,所以尽管第一个cli执行完成后该参数存在,但是当cli脚本是cli脚本时,整个apc内存空间被处理掉并且不再存在完成。

您需要一些其他机制(memcache,redis,队列,平面文件,数据库)才能使这项工作与APC以外的多个CLI执行(批量运行?)。

FWIW,APC使用共享内存进行这些操作。有一个seperate shared memory api for php,其中可能有效。对此的用例是针对进程之间共享的内容,根据定义,这些内容仅限于一个服务器。我能想到的那些用例并不多。在CLI中使用这些例程可能会有效,但我还没有尝试过。

如果你真的需要共享的东西,甚至可以在多个服务器上工作(例如批处理工作者的集群)那么你最好使用排队,内存缓存或redis。