PHP内存管理 - 致命错误:内存不足

时间:2012-11-22 10:35:43

标签: php mysql

我是一名新手PHP开发人员,正在学习这门优秀的语言。我现在最终得到一个包含1,343,579行的脚本,当我尝试运行它时,我得到以下内容:

Fatal error: Out of memory (allocated 269221888) (tried to allocate 536870912 bytes) in Unknown on line 0

我有一段相同的代码被重复512次,因为我允许2 ^ 9种不同的组合来考虑不同的搜索选项。我正在尽量使用unset()来最小化内存泄漏,使变量归零,有时显式调用gc_collect_cycles()

请您告诉我100万行代码是否会导致内存问题,或者我在内存管理方面做些傻事。

2 个答案:

答案 0 :(得分:1)

将您的资源分成更小的部分,仅包含您真正需要的部分。当你一遍又一遍地重复同样的事情时,将它重构为一个单独的函数并用适当的参数调用它。

在不知道具体任务的情况下,我们无法给出更多建议。

您可以根据条件逐步构建查询字符串

function execute_query($pdo, $cond1, $cond2, $cond3, ..., $cond9)
{
    $params = array();
    $bind_types = '';
    $sql = 'select * from mytable where';

    $sql = "$sql condition1 = ?";
    $params[] = $cond1;

    if (isset($cond2)) {
        $sql = "$sql and condition2 = ?";
        $params[] = $cond2;
    }

    if (isset($cond3)) {
        $sql = "$sql and condition3 = ?";
        $params[] = $cond3;
    }

    ...

    $sth = $pdo->prepare($sql);
    return $sth->execute($params);
}

答案 1 :(得分:0)

内存泄漏不正常,不应该发生。您可以尝试一些解决方案来在小部件上肢解此代码并进行结构化。

你可以试试像ZEND这样的MVC解决方案。 确保您的代码不再执行任何您需要的操作。 回顾所有。

即时通讯。