APC无法在php控制台中运行

时间:2012-05-02 18:27:00

标签: php console websocket wamp apc

我正在开发一个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

感谢。

2 个答案:

答案 0 :(得分:0)

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

此外,您无法在APC中存储资源/实例(如流或套接字) - 仅限序列化对象。

我会使用http://memcached.org/来缓存数据,从那时起,当您添加更多服务器时,他们也可以访问相同的缓存。 APC / XCache仅适用于单个服务器。

答案 1 :(得分:0)

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

1)如何在控制台上执行wget URL而不是独立的控制台php脚本?如果您需要输出,请使用wget -O - URL。 APC工作得很好。这里的限制是脚本没有获得任何物理文件访问权限。

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

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