APC 在 php 控制台中不起作用


APC not working in php console

我正在开发一个phpwebsocket应用程序。我必须将 phpwebsocket 的实例存储在我的应用程序中的每个位置。我找到了一个解决方案,那就是与APC合作。而且它不起作用。问题是,如果我从我在 php 控制台上运行的脚本 php 中访问带有 apc_store('foo', 'bar'( 的文件,它将不起作用。如果我做一个http请求(使用浏览器..(,它实际上可以工作,但我真的必须从php控制台运行phpwebsocket。

在 php.ini 中

[APC]
extension=php_apc.dll
apc.enabled = 1
apc.enable_cli = 1 
apc.shm_segments = 1
apc.shm_size = 64M
apc.max_file_size = 10M
apc.stat = 1

谢谢。

APC 在其进程空间中收集和存储缓存。由于控制台应用程序每次都会启动一个新进程,因此APC缓存启动干净,因此没有性能提升。在 apache mod 的情况下,进程空间是 apache Web 服务器本身,它保持活动状态。

1(在控制台上而不是独立的控制台PHP脚本上进行wget URL怎么样?如果需要输出,请使用 wget -O - URL 。APC 将正常工作。这里的限制是脚本无法获得任何物理文件访问权限。

2(您可以从控制台 php 控制台脚本中执行 file_get_contents(URL( 并转储内容。这样,您可以从控制台调用它,甚至可以拥有共享APC缓存的优势。您也可以在此处访问物理文件,但有一个问题。出于严重的安全原因,默认情况下,作为文件的 URL 提取处于关闭状态。您可能需要在 php.ini 中打开它。在生产网络上使用之前,请仔细验证您的案例。

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

php-cli

php-cgiphp-fpm共享APC缓存。事实上,我不确定它是否与自己共享 APC 缓存!

此外,您不能在 APC 中存储流或套接字等资源/实例 - 只能存储序列化对象。

从那时起,我会使用 http://memcached.org/来缓存数据,当您添加更多服务器时,它们也将能够访问相同的缓存。APC/XCache只适用于一台服务器。