CakePHP致命错误允许内存大小的字节耗尽 - 仅限一个记录。也许是MySQL索引问题?

时间:2014-07-29 20:10:04

标签: cakephp cakephp-2.0

这真的很奇怪。当尝试打开特定记录(主要id = 1)的视图(查看和编辑)时,我得到“致命错误允许内存大小的字节耗尽”。

错误消息是:

Fatal error: Allowed memory size of 134217728 bytes exhausted 
(tried to allocate 79 bytes) in 
/myappname/lib/Cake/Model/Datasource/Database/Mysql.php
on line 276

这些视图直接来自Cake Bake All视图,它们适用于所有其他记录(例如id = 2及以上)。

我的本​​地开发环境和prod托管的环境都存在这个问题。

问题似乎是记录本身,例如记录的内容。

但是,我可以从表中选择*,其中id = 1,dev& amp; prod数据库。我还将记录id = 1复制到MySQL的新记录中。这个新记录在视图中工作没问题。

为了尝试调试,我把:

pr($helperClass);die

在第276行的Mysql.php之前发生错误。调试消息是:

Error: syntax error, unexpected '$resultRow' (T_VARIABLE)
File: myappname\lib\Cake\Model\Datasource\Database\Mysql.php
Line: 277

我知道'允许的内存大小耗尽'错误表明内存的php.ini值不适用于发生的任何事情,但不是增加它我想确定是什么导致了这一点。

任何可能导致此问题的想法以及调试'意外$ resultRow'消息的内容是什么?任何其他调试建议也欢迎。

不要认为代码会有所帮助。这是一个简单的jane烘焙应用程序,有4个表:

  1. 卡片
  2. 评论
  3. 国家
  4. 用户
  5. 国家  用户

    CakePHP模特:

    • Country hasMany:Comment,User
    • 卡属于:国家,用户
    • Card hasMany:Comment
    • 评论所属:卡片,国家,用户
    • 用户所属:国家/地区
    • 用户hasMany:卡片,评论

    CakePHP视图控制器:

    public function view($id = null) {
        if (!$this->Country->exists($id)) {
            throw new NotFoundException(__('Invalid country'));
        }
        $options = array('conditions' => array('Country.' . $this->Country->primaryKey => $id));
        $this->set('country', $this->Country->find('first', $options));
    }
    

    CakePHP查看:

    <div class="countries view">
    <h2><?php echo __('Country'); ?> - <?php echo $this->Html->link(__('Edit'), array('action' => 'edit', $country['Country']['id'])); ?></h2>
        <dl>
            <dt><?php echo __('Id'); ?></dt>
            <dd>
                <?php echo h($country['Country']['id']); ?>
                &nbsp;
            </dd>
            <dt><?php echo __('Country'); ?></dt>
            <dd>
                <?php echo h($country['Country']['country']); ?>
                &nbsp;
            </dd>
            <dt><?php echo __('Country Code'); ?></dt>
            <dd>
                <?php echo h($country['Country']['country_code']); ?>
                &nbsp;
            </dd>
        </dl>
    </div>      
    

2 个答案:

答案 0 :(得分:0)

这个问题是我还没有(有目的地)整合到应用程序中的另一个表。

每个国家/地区有1000个记录。国家/地区pk id = 1比其他国家/地区更多。

在某些时候,我已将此其他表添加到Country模型的hasMany关系中。

所以CakePHP正在将其他桌面记录拉到场景背后,这就是内存的增加。

直到现在它还没有成为问题,所以这个其他表现在必须有更多的记录,并且只是倾斜了比例。

答案 1 :(得分:0)

您可以在控制器操作中使用

来增加内存限制

ini_set('memory_limit','256M'); 您还可以增加超时限制

参数或者set_time_limit(0);无限