0

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

谢谢。

4

2 回答 2

0

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

1)如何做一个wget URL控制台而不是一个独立的控制台php脚本?如果需要输出,请使用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

于 2012-05-03T01:35:31.933 回答
0

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

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

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

于 2012-05-02T18:32:28.277 回答