致命错误:无法重新分配自动全局变量_POST

时间:2014-03-22 20:48:07

标签: php wordpress themes

我无法访问我的WP(版本3.4.2)管理员。它如上所述

  

致命错误:无法在第540行的/home/xxx/public_html/wp-content/themes/rtthemes16/rt-framework/classes/admin.php中重新分配自动全局变量_POST。

第540行是:

function rt_check_sidebar_array($_POST){

    if(is_array($_POST)){

        $start_unset_count = 0;

        foreach($_POST as $key => $value){
            if(stristr($key, '_sidebar_name') == TRUE && $value=="") {                  
                unset($_POST[$key]);
                $start_unset_count = 1;
            }

            if($start_unset_count>0){
                unset($_POST[$key]);
                $start_unset_count++;
            }

            if($start_unset_count==6){
                $start_unset_count = 0;
            }               
        }
    }


    $newPost == $newPost ? $newPost : $_POST;       
    return $_POST;
}

任何见解? 谢谢:))

3 个答案:

答案 0 :(得分:21)

自PHP 5.4起,您不能使用超全局作为函数的参数

$ _ POST可全局访问。所以你不必转到你的职能部门。

http://php.net/manual/en/language.variables.superglobals.php#112184

这就是你的功能应该是这样的

function rt_check_sidebar_array(){

    if(is_array($_POST)){

        $start_unset_count = 0;

        foreach($_POST as $key => $value){
            if(stristr($key, '_sidebar_name') == TRUE && $value=="") {                  
                unset($_POST[$key]);
                $start_unset_count = 1;
            }

            if($start_unset_count>0){
                unset($_POST[$key]);
                $start_unset_count++;
            }

            if($start_unset_count==6){
                $start_unset_count = 0;
            }               
        }
    }


    $newPost == $newPost ? $newPost : $_POST;       
    return $_POST;
}

答案 1 :(得分:5)

@ user3450716,正如Abhik Chakraborty所说,你唯一需要做的就是从你的函数$_POST参数中删除rt_check_sidebar并保留没有参数的函数,如:

你的第540行:

function rt_check_sidebar_array($_POST){

将其更改为:

function rt_check_sidebar_array(){

答案 2 :(得分:1)

@ user3450716。 您也无法更改超全局变量,因此无法使用unset($_POST[$key])

function rt_check_sidebar_array(){
    $post = $_POST;
    if(is_array($post)){

        $start_unset_count = 0;

        foreach( $post as $key => $value ){
            if( stristr( $key, '_sidebar_name' ) == TRUE && $value == "" ) {                  
                unset( $post[ $key ] );
                $start_unset_count = 1;
            }

            if( $start_unset_count > 0 ){
                unset( $post[ $key ] );
                $start_unset_count++;
            }

            if( $start_unset_count == 6 ){
                $start_unset_count = 0;
            }               
        }
    }

    // idk why you wrote this,
    // because $newPost variable isn't used in the code above and below
    $newPost == $newPost ? $newPost : $post;

    return $post;
}