Ошибка разбора: синтаксическая ошибка, неожиданный T_VARIABLE, ожидаемый T_STRING в PHP 5.3 - PullRequest
1 голос
/ 09 марта 2012

У меня проблема с этим ... он говорит "неожиданный T_VARIABLE". Проблемная строка такова:

$children[ $i['parent_id'] ][] = array($i['forum_id'], "<option value=\"{$i['forum_id']}\"$selected> ", "{$i['forum_name']}</option>\n");

Я попытался удалить $$children), но это все равно приводит к ошибке. Там написано "Ошибка разбора: синтаксическая ошибка, неожиданное '[' in ..."

Как ни странно, в PHP 5.2 это работает без проблем. Но в PHP 5.3 возникает проблема.

Поскольку я на самом деле не программист (знаю только немного основ, я в основном проектирую), я действительно не понимаю, что здесь происходит. Может ли кто-нибудь оказать помощь?

Вот полная функция:

function build_forum_jump($html=1, $override=0, $remove_redirects=0)
{
    global $INFO, $DB, $ibforums;
    $last_cat_id = -1;

    if ( $remove_redirects )
    {
        $qe = 'AND f.redirect_on <> 1';
    }
    else
    {
        $qe = '';
    }

    $DB->query("SELECT f.id as forum_id, f.parent_id, f.subwrap, f.sub_can_post, f.name as forum_name, f.position, f.redirect_on, f.read_perms, c.id as cat_id, c.name
                FROM ibf_forums f
                 LEFT JOIN ibf_categories c ON (c.id=f.category)
                WHERE c.state IN (1,2) $qe
                ORDER BY c.position, f.position");


    if ($html == 1) {

        $the_html = "<form onsubmit=\"if(document.jumpmenu.f.value == -1){return false;}\" action='{$ibforums->base_url}act=SF' method='get' name='jumpmenu'>
                     <input type='hidden' name='act' value='SF' />\n<input type='hidden' name='s' value='{$ibforums->session_id}' />
                     <select name='f' onchange=\"if(this.options[this.selectedIndex].value != -1){ document.jumpmenu.submit() }\" class='forminput'>
                     <optgroup label=\"{$ibforums->lang['sj_title']}\">
                      <option value='sj_home'>{$ibforums->lang['sj_home']}</option>
                      <option value='sj_search'>{$ibforums->lang['sj_search']}</option>
                      <option value='sj_help'>{$ibforums->lang['sj_help']}</option>
                     </optgroup>
                     <optgroup label=\"{$ibforums->lang['forum_jump']}\">";
    }

    $forum_keys = array();
    $cat_keys   = array();
    $children   = array();
    $subs       = array();
    $subwrap    = array();

    // disable short mode if we're compiling a mod form

    if ($html == 0 or $override == 1)
    {
        $ibforums->vars['short_forum_jump'] = 0;
    }

    while ( $i = $DB->fetch_row() )
    {
        $selected = '';
        $redirect = "";

        if ($html == 1 or $override == 1)
        {
            if ($ibforums->input['f'] and $ibforums->input['f'] == $i['forum_id'])
            {
                $selected = ' selected="selected"';
            }
        }

        if ( $i['redirect_on'] )
        {
            $redirect = $ibforums->lang['fj_redirect'];
        }

        if ($i['subwrap'] == 1)
        {
            $subwrap[ $i['forum_id'] ] = 1;
        }

        if ($i['subwrap'] == 1 and $i['sub_can_post'] != 1)
        {
        /***************************
        *** INFINITE SUBFORUMS 
        ****************************/
        if ($i['parent_id'] > 0)    {
            $children[ $i['parent_id'] ][] = array($i['forum_id'], "<option value=\"{$i['forum_id']}\"".$sub_css."$selected>  ", "{$i['forum_name']}$is_sub</option>\n");
        }
        else    {
            $forum_keys[ $i['cat_id'] ][$i['forum_id']] = "<option value=\"{$i['forum_id']}\"".$sub_css."$selected>  -{$i['forum_name']}$is_sub</option>\n";
        }
        /**********INFINITE - END**************/

        }
        else
        {
            if ( $this->check_perms($i['read_perms']) == TRUE )
            {
                if ($i['parent_id'] > 0)
                {
                /***************************
                *** INFINITE SUBFORUMS
                ****************************/
                $children[ $i['parent_id'] ][] = array($i['forum_id'], "<option value=\"{$i['forum_id']}\"$selected>  ", "{$i['forum_name']}</option>\n");
                /**********INFINITE - END**************/
                }
                else
                {
                    $forum_keys[ $i['cat_id'] ][$i['forum_id']] = "<option value=\"{$i['forum_id']}\"".$selected.">&nbsp;&nbsp;- {$i['forum_name']} $redirect</option><!--fx:{$i['forum_id']}-->\n";
                }
            }
            else
            {
                continue;
            }
        }

        if ($last_cat_id != $i['cat_id'])
        {

            // Make sure cats with hidden forums are not shown in forum jump

            $cat_keys[ $i['cat_id'] ] = "<option value='-1'>{$i['name']}</option>\n";

            $last_cat_id = $i['cat_id'];

        }
    }

    foreach($cat_keys as $cat_id => $cat_text)
    {
        if ( is_array( $forum_keys[$cat_id] ) && count( $forum_keys[$cat_id] ) > 0 )
        {
            $the_html .= $cat_text;

            foreach($forum_keys[$cat_id] as $idx => $forum_text)
            {
                if ( $subwrap[$idx] != 1 )
                {
                    $the_html .= $forum_text;
                }
                else if (count($children[$idx]) > 0)
                {
                    $the_html .= $forum_text;

                    if ($ibforums->vars['short_forum_jump'] != 1)
                    {
                        /****** INFINITE SUBFORUMS FIX BEGINS ************/
                        $the_html .= $this->subforums_addtoform($idx, \$children);
                        /********** INFINITE FIX - END ************/
                    }
                    else
                    {
                        $the_html = str_replace( "</option><!--fx:$idx-->", " (+".count($children[$idx])." {$ibforums->lang['fj_subforums']})</option>", $the_html );
                    }
                }
                else
                {
                    $the_html .= $forum_text;
                }
            }
        }
    }


    if ($html == 1)
    {
        $the_html .= "</optgroup>\n</select>&nbsp;<input type='submit' value='{$ibforums->lang['jmp_go']}' class='forminput' /></form>";
    }

    return $the_html;

}

Ответы [ 4 ]

1 голос
/ 26 апреля 2012

http://wordpress.org/support/topic/plugin-post-google-map-coud-not-to-activate-the-plugin

Я получил эту же ошибку после того, как WP работал, но PHP был обновлен, из следующего кода:

if($bgc==""){
    $bgc="#eeeeee";
}else{ \
    $bgc="";
}
$gmp_action = "delete-address";
?>

Устранена обратная косая черта.

1 голос
/ 11 марта 2012

Вы смотрите не в том месте.

/****** INFINITE SUBFORUMS FIX BEGINS ************/
$the_html .= $this->subforums_addtoform($idx, \$children);
/********** INFINITE FIX - END ************/

Это должно быть $children, , а не \$children.


Что касается того, почему это работает в PHP 5.2, а не в PHP 5.3, символ '\' был введен для пространств имен (например, MyNamespace\SubSpace\Something).

С учетом следующего кода:

function foo() {
    $children = 'Hello world';
    echo \$children;
}
foo();

В PHP 5.2 результат будет таким:

Предупреждение: неожиданный символ на входе: состояние '\' (ASCII = 92) = 1 в% s в строке% d

Привет, мир

В PHP 5.3:

Ошибка разбора: синтаксическая ошибка, неожиданный T_VARIABLE, ожидающий T_STRING в% s в строке% d

В PHP 5.4:

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданное '$ children' (T_VARIABLE), ожидаемый идентификатор (T_STRING) в% s в строке% d

1 голос
/ 09 марта 2012

Попробуй это.Я переписал всю строку, чтобы она была немного более понятной (и более согласованной).

$children[$i['parent_id']][] = array($i['forum_id'], '<option value="'.$i['forum_id'].'"'.$selected.'>  ', $i['forum_name'].'</option>\n');

Также измените строку 1270 с вашего кода на:

$the_html = str_replace('</option><!--fx:'.$idx.'-->', '(+'.count($children[$idx]).' '.$ibforums->lang['fj_subforums'].')</option>', $the_html);
0 голосов
/ 09 марта 2012

Попробуйте это:

$children[ $i['parent_id'] ][] = array($i['forum_id'], '<option value="'.$i['forum_id'].'"'.$sub_css.'"'.$selected.'>  ', $i['forum_name'].$is_sub.'</option>'."\n");
...