PHP致命错误:wincache失败(windows azure)

时间:2015-04-24 16:32:58

标签: php codeigniter azure

我的项目中有codeigniter框架。我的网站在windows azure平台上运行。有时它会给我这个错误:

  

PHP致命错误:Wincache失败[6484] free_memory:块0x41d56d8未使用    在第44行的D:\ home \ site \ wwwroot \ system \ libraries \ Log.php

我试图通过更改内存值来更改php.ini文件:

ini_set('memory_limit','2048M');

但是,在我检查memory_get_peak_usage();后,我发现应用程序甚至没有超过1MB。我不知道这里发生了什么。当这种情况发生时,我会收到空​​白页面和网站。

请问我是否需要更多信息或代码。

Log.php:

public function __construct()
{
    $config =& get_config();

    $this->_log_path = ($config['log_path'] != '') ? $config['log_path'] : APPPATH.'logs/';

    if ( ! is_dir($this->_log_path) OR ! is_really_writable($this->_log_path)) // This is line 44.
    {
        $this->_enabled = FALSE;
    }

    if (is_numeric($config['log_threshold']))
    {
        $this->_threshold = $config['log_threshold'];
    }

    if ($config['log_date_format'] != '')
    {
        $this->_date_fmt = $config['log_date_format'];
    }
}

log.php文件是默认的codeigniter文件。

最终解决方案:

我已使用此更新了我的php.ini文件:

wincache.fcenabled=0
wincache.ocenabled=0
wincache.ucenabled=0
wincache.reroute_enabled = 0
wincache.srwlocks = 0

2 个答案:

答案 0 :(得分:3)

Windows Server上的IIS或WinCache存在问题。您可以在iis论坛上关注official thread。 为了确保,请检查php.ini中的以下选项:

wincache.reroute_enabled = 0
wincache.srwlocks = 0

同时将wincache更新为最新版本。

答案 1 :(得分:0)

自WinCache 1.3.7.5起,已删除特定的WinCache错误消息,该消息已在最近的Azure Web服务更新中推出。

关于错误消息的含义:在尝试释放跨进程共享内存段中的内存块时,WinCache检测到该块已被释放。该消息表明WinCache检测到此问题,避免损坏内存。该消息应该是警告级别消息。此外,执行请求应该运行完成,并且应该将响应返回给客户。

在WinCache 1.3.7.4之前,WinCache确实检测到这种情况,最终会破坏内存,这最终会导致AV。因此,错误消息实际上表明WinCache只是让您免于崩溃,欢迎您!