4

我有一个抛出错误的 CakePHP 站点(一开始很好,并且已经在线几个月了——不确定问题是什么时候开始的)。

我越来越:

警告(512):_cake_core_ 缓存无法将“cake_dev_en-us”写入 Apc 缓存 [CORE/Cake/Cache/Cache.php,第 310 行] 警告(512):_cake_core_ 缓存无法将“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”来修补它,但我需要了解为什么会发生这种情况。首先,是什么导致了错误?其次,为什么忽略核心设置?

4

4 回答 4

1

在 Zend Server 7 上运行 CakePHP 站点时,我遇到了这个 APC 缓存错误。不幸的是,Zend Server 似乎附带了一个假/替代APC 层,并且根据我的测试,变量数据存储不起作用(函数总是返回 false ) 这就是 CakePHP 所抱怨的。

ZendServer 仪表板中的这个屏幕显示了 APC。

Zend Server 7 中的 APC 兼容层

解决方案是:

  1. 通过编辑app/Config/core.php以注释掉以下行来完全禁用 APC 缓存...

    /*if (extension_loaded('apc') && function_exists('apc_dec') && (php_sapi_name() !== 'cli' || ini_get('apc.enable_cli'))) {
        $engine = 'Apc';
    }*/
    
  2. 或者,您只能有条件地加载 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';
    }
    
于 2015-02-10T06:07:42.427 回答
0

我有时会遇到这个错误,我认为这是由于 APC 内存不足引起的(由于应用程序负载过重)。APC 的错误配置也可能是造成这种情况的原因。

http://php.net/manual/en/apc.configuration.php

服务器运行后,应将与扩展捆绑在一起的 apc.php 脚本复制到 docroot 的某个位置并使用浏览器查看,因为它提供了对 APC 内部工作的详细分析。如果在 PHP 中启用了 GD,它甚至会显示一些有趣的图形。当然,首先要确保的是它实际上是在缓存文件。如果 APC 正在工作,缓存完整计数(左侧)将显示缓存达到最大容量并且必须强制清除在最后 apc.ttl 秒内未访问的任何条目的次数。这个数字在配置良好的缓存中被最小化。

所以我建议分析 apc.php 的输出(在 ubuntu 上存储在 /usr/share/doc/php-apc/ 中),并作为增加分配给 APC 的内存段大小的第一个修复。

在 php.ini 添加行

apc.shm_size = 64M(或任何合适的大小,默认为 32M)

于 2015-04-16T17:47:41.013 回答
-2

它是关于apache用户写权限的,我通常在开发模式下做一个

# chmod -R 777 app/tmp

但在生产中,您必须为 apache Web 服务器用户执行可写的 app/tmp 目录

此致

于 2013-02-24T03:32:15.577 回答
-2

更改应用缓存的 tmp 文件夹中的组所有者:

sudo chown -R User:_www /Applications/Site/app/tmp/

然后确保您已经设置了足够的权限 775

于 2014-03-07T13:49:16.877 回答