在CakePHP网站中获取“无法写入”错误

时间:2012-10-20 10:18:23

标签: cakephp cakephp-2.0

我有一个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”来修补它,但我需要理解为什么会这样。首先,是什么导致错误?其次,为什么核心设置被忽略了?

4 个答案:

答案 0 :(得分:1)

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

ZendServer仪表板中的此屏幕显示APC。

APC Compatibility Layer in Zend Server 7

解决方案是:

  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';
    }
    

答案 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