我有一个CakePHP网站,它会抛出错误(一开始很好,并且已经上线了几个月 - 不确定问题何时开始)。
我得到了:
警告(512):_ cake_core_ cache无法写'cake_dev_en-us' 到Apc缓存[CORE / Cake / Cache / Cache.php,第310行]警告(512): _cake_core_ cache无法将'cake_en-us'写入Apc缓存[CORE / Cake / Cache / Cache.php,第310行]警告(512):_ cake_model_ 缓存无法将“default_projects”写入Apc缓存
[CORE/Cake/Cache/Cache.php, line 310]
Warning (512): _cake_model_ cache was unable to write 'default_projects' to Apc cache [CORE/Cake/Cache/Cache.php, line 310]
Warning (512): _cake_model_ cache was unable to write 'default_clients' to Apc cache [CORE/Cake/Cache/Cache.php, line 310]
Warning (512): _cake_model_ cache was unable to write 'default_clients' to Apc cache [CORE/Cake/Cache/Cache.php, line 310]
Warning (512): _cake_model_ cache was unable to write 'default_projectpages' to Apc cache [CORE/Cake/Cache/Cache.php, line 310]
Warning (512): _cake_model_ cache was unable to write 'default_projectpages' to Apc cache [CORE/Cake/Cache/Cache.php, line 310]
Warning (512): _cake_model_ cache was unable to write 'default_settings' to Apc cache [CORE/Cake/Cache/Cache.php, line 310]
Warning (512): _cake_model_ cache was unable to write 'default_settings' to Apc cache [CORE/Cake/Cache/Cache.php, line 310]
我已确保tmp目录是可写的(已将其设置并将所有包含的文件夹和文件设置为0777;还检查它是否已正确更新,并且确实如此);我还通过将调试级别设置为0来关闭core.php中的错误报告。
网站的大部分内容都很好,但这个特定的页面是由AJAX引入的,我不知道这是否有任何区别。
我通过在cake-error上设置“display:none”来修补它,但我需要理解为什么会这样。首先,是什么导致错误?其次,为什么核心设置被忽略了?
答案 0 :(得分:1)
在Zend Server 7上运行CakePHP站点时,我收到了此APC缓存错误。不幸的是,Zend Server似乎附带了 假/替换 APC层,并且来自我的测试变量数据存储不起作用(函数总是返回false),这就是CakePHP所抱怨的。
ZendServer仪表板中的此屏幕显示APC。
解决方案是:
通过编辑app/Config/core.php
完全禁用APC缓存以注释掉以下行...
/*if (extension_loaded('apc') && function_exists('apc_dec') && (php_sapi_name() !== 'cli' || ini_get('apc.enable_cli'))) {
$engine = 'Apc';
}*/
或者,您只能有条件地加载APC。在我的情况下,我只是想在我的本地开发服务器上禁用它,但将其保持活动状态。
$isLocalDevelopment = strpos($_SERVER['SERVER_NAME'], '.dev');
if (!$isLocalDevelopment && extension_loaded('apc') && function_exists('apc_dec') && (php_sapi_name() !== 'cli' || ini_get('apc.enable_cli'))) {
$engine = 'Apc';
}
答案 1 :(得分:0)
我有时遇到这个错误,我认为这是由于APC内存不足造成的(由应用程序中的重负载引起)。此外,APC配置错误也可能是造成这种情况的原因。
http://php.net/manual/en/apc.configuration.php:
服务器运行后,捆绑的apc.php脚本 应该将扩展名复制到docroot中并查看 使用浏览器,因为它提供了内部的详细分析 APC的运作方式。如果在PHP中启用了GD,它甚至会显示一些 有趣的图表。当然,首先要确保的是它 实际上是缓存文件。如果APC正在工作,则缓存完全计数 number(左侧)将显示缓存的次数 达到最大容量,并不得不强行清理任何条目 在最后一个apc.ttl秒中访问过的。这个数字是 在配置良好的缓存中最小化。
所以我建议分析apc.php的输出(在/ usr / share / doc / php-apc /上存储的ubuntu,并作为第一个修复,以增加为APC分配的内存段的大小)。
在php.ini中添加行
apc.shm_size = 64M
(或任何适当的大小,默认为32M)
答案 2 :(得分:-2)
关于apache用户写入权限,在我通常做的时候在开发模式上
# chmod -R 777 app/tmp
但在生产时,您必须为apache Web服务器用户
执行可写的app / tmp目录最好的问候
答案 3 :(得分:-2)
更改应用缓存的tmp文件夹中的群组所有者:
sudo chown -R User:_www /Applications/Site/app/tmp/
然后确保您已设置足够的权限775