我正在使用以下命令设置 APC 缓存数组:
apc_add( 'ips', $ips );
通过命令行。可以通过以下方式检索此缓存数组:
apc_fetch( 'ips' )
在同一个脚本中。
但是,无法从后续 CLI 脚本或通过 Apache 调用的 PHP 访问它。虽然我可以跨 Apache 运行的脚本调用变量。
我正在运行:5.4.6-1ubuntu1.8 并且 APC 已启用:
apc.enable_cli=1
在我的本地 PC 上,我将 APCU 与 PHP7 一起使用,并且不会出现此问题。
设置:
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
有任何想法吗?
是的,这对于 apc.enable_cli=1 参数来说是一个令人困惑的方面。它表明您可以获得与 apache 模块类似的行为。
然而,对于 cli,只有一个进程并且没有共享状态,因此尽管参数在第一次 cli 执行完成后就存在,但当 cli 脚本完成时,整个 apc 内存空间将被释放并不再存在。
您需要一些其他机制(memcache、redis、队列、平面文件、数据库)来使其与除 APC 之外的多个 CLI 执行(批量运行?)一起工作。
FWIW,APC 使用共享内存来执行这些操作。有一个php 的单独共享内存 api http://php.net/manual/en/book.shmop.php, which might工作。其用例是在进程之间共享某些内容,根据定义,这些进程仅限于一台服务器。我能想到的用例并不多。通过 CLI 使用这些例程可能会起作用,但我还没有尝试过。
如果您确实需要共享某些内容,甚至可以跨多个服务器(例如批处理工作集群)工作,那么您最好使用队列、memcache 或 redis。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)