自定义函数在几小时后导致503错误

时间:2015-04-30 作者:SinisterBeard

我有一个用PHP编写的自定义函数,用于Wordspress主题。当我最初编写它时,它完全按照预期工作(它从ID返回一个术语的父母和祖父母等)。

然而,几个小时后,它开始抛出503个错误。为什么这只会在一段时间后发生?是否有某种内存泄漏会随着时间的推移而累积?

$ancestors = $terms[0]->term_id.GetAncestors($terms[0]->term_id,$include);

function GetAncestors($term_id,&$include) {
    $child_term = get_term( $term_id, \'category\' );
    $parent_term = get_term( $child_term->parent, \'category\' );
    $include.=\',\'.$parent_term->term_id;
    if($parent_term->parent!=11) {GetAncestors($parent_term->term_id,$include);}
    return $include;
}
是函数本身导致了问题,还是我以某种方式使用它,例如使用对象的引用作为变量之一?

2 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

使用WordPress函数怎么样get_ancestors(), 哪一个

返回包含给定对象父对象的数组。

确切地说

层次结构中从最低到最高的祖先数组

我们可以使用implode 为此:

function wpse185971_get_ancestors_list(
    $object_id,
    $object_type = \'category\',
    $separator = \',\'
) {
    $ancestors_array = get_ancestors( $object_id, $object_type );
    $ancestors_list  = implode( $separator, $ancestors_array );
    return $ancestors_list;
}

SO网友:Howdy_McGee

如果非要我猜的话,我会说你遇到了一个像你建议的那样的内存泄漏,无限递归循环。您需要检查术语何时到达祖先树的顶部或出现错误:

$ancestors = $terms[0]->term_id.GetAncestors( $terms[0]->term_id, $include );

function GetAncestors( $term_id, &$include ) {
    $child_term     = get_term( $term_id, \'category\' );
    $parent_term    = get_term( $child_term->parent, \'category\' );
    $include       .= \',\' . $parent_term->term_id;

    if( ! empty( $parent_term ) && $parent_term->parent != 11 ) {       // We\'ve reached the top - parent term_id is 0
        GetAncestors( $parent_term->term_id, $include );
    }

    return $include;
}
最终,$parent->term_id 将等于0 我们不能再往上爬了。我们需要对此进行测试,一旦达到目标就退出。我想,如果您打开调试,您将看到与此函数相关的大量非对象错误。PHP函数empty() 检查null0 所以这应该足够了。

结束