Php 通过Magento/Zend_Pdf创建100-200k Pdf会导致内存泄漏

Php 通过Magento/Zend_Pdf创建100-200k Pdf会导致内存泄漏,php,magento,pdf,memory-leaks,zend-pdf,Php,Magento,Pdf,Memory Leaks,Zend Pdf,请注意 我知道使用另一个PHP Pdf库会更容易,但现在Pdf是来自Magento的修改发票-我需要完整的订单/发票对象,因此请记住,目前除了使用Zend_Pdf之外,没有其他选择 我已经试了三天了,但似乎Zend\u Pdf通过Zend\u Pdf\u ElementFactory泄漏内存 每次运行此代码时(在foreach循环中运行): 现在我尝试使用unset($pdf) 我还研究了Zend_Pdf类,并构建了一个u析构函数方法,将所有受保护的变量设置为null,并取消它们的设置 经过大

请注意

我知道使用另一个PHP Pdf库会更容易,但现在Pdf是来自Magento的修改发票-我需要完整的订单/发票对象,因此请记住,目前除了使用Zend_Pdf之外,没有其他选择


我已经试了三天了,但似乎
Zend\u Pdf
通过
Zend\u Pdf\u ElementFactory
泄漏内存

每次运行此代码时(在foreach循环中运行):

现在我尝试使用
unset($pdf)

我还研究了Zend_Pdf类,并构建了一个u析构函数方法,将所有受保护的变量设置为null,并取消它们的设置

经过大量调试并使用XGui查看内存使用情况后:

Zend\u Pdf\u ElementFactory
中有一种方法,其目的如下所述:

* PDF element factory.
* Responsibility is to log PDF changes
在第365行中,
listModifiedObjects
的公共功能是:

/**
 * Enumerate modified objects.
 * Returns array of Zend_Pdf_UpdateInfoContainer
 *
 * @param Zend_Pdf_ElementFactory_Interface $rootFactory
 * @return array
 */
public function listModifiedObjects($rootFactory = null)
{
...

    foreach ($this->_attachedFactories as $factory) {
        $result += $factory->listModifiedObjects($rootFactory);
    }

    return $result;
}
这个
foreach
递归地为每个连接的工厂调用自己。。。我的猜测是我的记忆被浪费在这里的某个地方

如果您有一些线索或指导,告诉我Zend_Pdf_ElementFactory是如何工作的,或者我可以如何清除它(有一个接近的方法,但据我所知,它在任何地方都没有被调用),我将不胜感激

非常感谢您的帮助:-)


PS:如果有什么不清楚的地方,我很乐意提供更多的细节/信息

你能提供更多的代码吗?特别是围绕代码所在的foreach循环?当然,我刚刚更新了它!
* PDF element factory.
* Responsibility is to log PDF changes
/**
 * Enumerate modified objects.
 * Returns array of Zend_Pdf_UpdateInfoContainer
 *
 * @param Zend_Pdf_ElementFactory_Interface $rootFactory
 * @return array
 */
public function listModifiedObjects($rootFactory = null)
{
...

    foreach ($this->_attachedFactories as $factory) {
        $result += $factory->listModifiedObjects($rootFactory);
    }

    return $result;
}