Why am I getting memory leaks in SimplePie when using $item->get_permalink()?

扶醉桌前 提交于 2019-12-04 10:07:23

This is actually not a memory leak, but rather static function caches that aren't being cleaned!

This is due to SimplePie_IRI::set_iri (and set_authority, and set_path). They set a static $cache variable, but they don't unset or clean this when a new instance of SimplePie is created, which means the variables only gets bigger and bigger.

This can be fixed by changing

public function set_authority($authority)
{
    static $cache;

    if (!$cache)
        $cache = array();

    /* etc */

to

public function set_authority($authority, $clear_cache = false)
{
    static $cache;
    if ($clear_cache) {
        $cache = null;
        return;
    }

    if (!$cache)
        $cache = array();

    /* etc */

..etc in the following functions:

  • set_iri,
  • set_authority,
  • set_path,

And adding a destructor to SimplePie_IRI calling all the functions using a static cache, with a parameter of true in $clear_cache, will work:

/**
 * Clean up
 */
public function __destruct() {
    $this->set_iri(null, true);
    $this->set_path(null, true);
    $this->set_authority(null, true);
}

Which will now result in no gain in memory consumption over time:

Git Issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!