0

我是一名新手 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 万行代码是否最终会出现这个内存问题,或者我在做一些与内存管理相关的愚蠢事情。

4

2 回答 2

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);
}
于 2012-11-22T10:40:39.190 回答
0

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

您可以尝试一些 MVC 解决方案,例如 ZEND 或其他东西。确保您的代码没有做更多您需要的事情。审查所有。

上那个。

于 2012-11-22T10:40:45.637 回答