Warum T_CONSTANT_ENCAPSED_STRING-Error in Script?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Warum T_CONSTANT_ENCAPSED_STRING-Error in Script?

    Hi allerseits.

    Ich bekomme aus mir nicht erklärlichen Gründen folgenden Fehler
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in D:\files\xampplite\htdocs\cmsm\lib\class.kernel.php on line 168
    in einem Script.

    Zeile 168 sieht wie folgt aus (in der Methode, in der sie steht - line 168 ist nur alles ab echo):

    PHP-Code:
    function render_page()
    {
        echo 
    preg_replace_callback('!\{(.+?)\}!',
            array(
    $this'box_content'),
            
    $this->template['content']);

    In meinem Script ist das ab echo alles übrigens in einer Zeile, als könnte der Fehler auch in den nachfolgenden Zeilen liegen. Ich habs nur umgebrochen, um seitliche Scrollbalken zu vermeiden.

    So weit ich das sehe, verwende ich dort nirgends eine Konstante?
    Auch sonnst hab ich im Script keine Konstanten, nur ganz oben wird eine in der index.php definierte Konstante abgefragt, um zu überprüfen, ob die Datei von der index.php oder von einem User aufgerufen wird...

    Ich bin wirklich kein Anfänger mehr in PHP, habe jetzt schon mehrere Jahre Erfahung mit dieser Sprache. Aber ich sehe bei diesem Error einfach nicht die Fehlerquelle.
    Keine falsch gesetzten Anführungszeichen und so weiter - oder bin ich einfach nur blind?

    Die Codezeilen sind übrigens für ein eigenes CMS. Hatte vor einger Zeit schonmal ein kleines CMS für eigene Projekte programmiert, das nun modular umgeschrieben werden soll.


    edit: sehe gerade: hab vor den geschweiften Klammern im Reguleren Ausdruck eigentlich noch einen Backslash, um sie zu escapen.
    Das Forum stellt die aber irgendwie nicht da, obwohl ich sie mit reingeschrieben hab.
    Zuletzt geändert von JeyDie; 01.08.2007, 18:26.

  • #2
    Der 2. Parameter ... versuche es mit array('self', 'box_content').

    Kommentar


    • #3
      Ich hab das gleiche Konstrukt aber schon an verschiedenen anderen Stellen im Script und es geht einwandfrei.

      Aber gut, ich schau ma, obs funzt.

      edit: Geht immernoch nicht, auch wenn ichs so mache...
      Jemand ne andere Idee?

      Danke schonma für die Hilfe!
      Zuletzt geändert von JeyDie; 01.08.2007, 18:52.

      Kommentar


      • #4
        Grenz das Problem ein - entferne Teile der Zeile, bis es funktioniert, der Teil den du entfernt hast, da liegt dann der Fehler ... so sollte sich ein Parse-Error doch recht schnell finden lassen.

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Du könntest in diesem oder in dem anderen Forum mal ein größeres Stückchen Code zeigen.
          Wir werden alle sterben

          Kommentar


          • #6
            Ok, da ich nicht weiß, wie viel mehr Code erforderlich ist, hier einfach ma die ganze class.kernel.php...

            Könnte sein, dass ich einiges zu umständlich gelöst habe.
            Ich weiß auch noch nicht, ob das Script genau das macht, was ich will. Denn ich bin beim ersten Testlauf bei genau dem Fehler hängen geblieben...

            Einige Stellen sind noch aus dem alten CMS übernommen, von daher sollten etwa 50% des Codes funktionieren, da auch das alte CMS lief.
            Ich weiß halt nur nicht, wo in den anderen 50% der Fehler liegt...

            PHP-Code:
            <?php

            class kernel
            {

            var 
            $objects = array();
            var 
            $page = array();
            var 
            $template = array();
            var 
            $last_module 0;

                function &
            get_instance()
                {
                    static 
            $instance;
                    if(!isset(
            $instance))
                        
            $instance = new kernel;
                    return 
            $instance;
                }



                function 
            page()
                {
                
                    
            $mysql = &mysql::get_instance();

                
            // If a page is called, the page id is in $_GET['id']
            // or the name of the page is in $_GET['name'].
            // If no page is called, the ID of the start page
            // will be written in $this->page['id']
                
                    
            if(!isset($_GET['id']))
                    {
                        if(isset(
            $_GET['name']))
                        {
                            if(
            $mysql->query('SELECT id FROM pages 
                                        WHERE name = "'
            .mysql_real_escape_string($_GET['name']).'"') == false)
                                die(
            display_system_error(2));
                    
                            
            $result    $mysql->get_array();
                            
            $this->page['id'] = $result['id'];
                        
                            
            $this->page['name'] = $_GET['name'];

                        }
                        
                        else
                        {
                            if(
            $mysql->query('SELECT start_page
                                        FROM options'
            ) == false)
                                die(
            display_system_error(2));
                    
                            
            $result    $mysql->get_array();
                            
            $this->page['id'] = $result['start_page'];
                        }
                    }

                    else 
            $this->page['id'] = $_GET['id'];
                    
                    
            // If the Name is not allready in $this->page['name'] yet,
            // it will be written in.

                    
            if(!isset($this->page['name']))
                    {    
                        if(
            $mysql->query('SELECT name FROM pages
                                        WHERE id = "'
            .mysql_real_escape_string($this->page['id']).'"' == false)
                            die(
            display_system_error(2));

                        
            $result    $mysql->get_array();
                        
            $this->page['name'] = $result['name'];
                    }
                }


                function 
            template()
                {
                
                    
            $mysql = &mysql::get_instance();


                    
            // Select template of the page. If $template['id'] is 0
                    // (= the called page need the standard template), 
                    // $template['id'] will be overwritten with the id of the 
                    // standard template
                    
            if($mysql->query('SELECT template_id FROM pages 
                    WHERE id = "'
            .mysql_real_escape_string($this->page['id']).'"') == false)
                        die(
            display_system_error(2));

                    
            $result $mysql->get_array();
                    
            $this->template['id'] = $result['template_id'];
                    
                    
                    if(
            $this->template['id'] == 0)
                    {
                        if(
            $mysql->query('SELECT standard_template
                                    FROM options'
            ) == false)
                            die(
            display_system_error(2));
                    
                        
            $result $mysql->get_array();
                        
            $this->template['id'] = $result['standard_template'];
                    }

                    
            // Get the Name of the template
                    
            if($mysql->query('SELECT name FROM templates
                                WHERE id = "'
            .mysql_real_escape_string($this->template['id']).'"') == false)
                        die(
            display_system_error(2));
                        
                    
            $result $mysql->get_array();
                    
            $thia->template['name'] = $result['name'];

                    
            // Load the selected template in $template['content']
                    
            if($mysql->query('SELECT content FROM templates
                                    WHERE id = "'
            .$this->template['id'].'"') == false)
                        die(
            display_system_error(2));

                    
            $result $mysql->get_array();
                    
            $this->template['content'] = $result['content'];
                
                }
                
                function 
            load_module($name)
                {        
                    if(
            is_file('module_'.$name.'php'))
                    {
                        require_once 
            'module_'.$name.'php';
                        if(
            class_exists($name))
                        {
                            if(isset(
            $this->objects[$name]) == false$this->objects[$name] = new $name;
                            if(
            method_exists($this->objects[$name]->page())) return true;

                            unset(
            $this->objects[$name]);
                            return 
            false;
                        }
                    }
                }

                
                function 
            box_content($name)
                {
                
                    
            $mysql = &mysql::get_instance();

                
                    if(
            $mysql->query('SELECT content FROM boxes
                                    WHERE name = "'
            .mysql_real_escape_string($name).'"
                                    AND WHERE page_id = "'
            .mysql_real_escape_string($this->page['id']).'"') == false)
                        die(
            display_system_error(2));

                    
            $result $mysql->get_array();
                    
            $box_content $result['content'];
                    
                    if(
            $mysql->query('SELECT name FROM modules') == false)
                        die(
            display_system_error(2));
                    
                    while(
            $result $mysql->get_array())
                    {
                        if(
            strpos($box_content'['.$result['name'].']') !== false)
                        {
                            if(
            $this->load_module($result['name']))
                            {
                                
            $box_content preg_replace_callback('!\['.$result['name'].'\]!', array('this''run_module'), $box_content']);
                            }
                        }
                    }
                return $box_content;    
                    
                }



                function run_module()
                {
                    $last_module = $this->last_module;
                    return $this->objects[$last_module]->page();
                }
                
                function render_page()
                {
                    echo preg_replace_callback('
            !\{(.+?)\}!', array('this', 'box_content'), $this->template['content']);
                }
                
            }
            ?>

            Fehler einkreisen ist gut.
            Nur kann man bei einer Funktion mit drei Parametern schlecht welche weglassen...
            Zuletzt geändert von JeyDie; 01.08.2007, 19:40.

            Kommentar


            • #7
              Die ersten Zeilen sind irrelevant. Bitte entfernen oder umbrechen gemäß unseren Regeln. Danke.

              Zum Problem: Schau dir mal die Farbgebung deines Codes da oben an!

              Kommentar


              • #8
                Hol dir nen Editor mit Syntax-Highlighting...
                PHP-Code:
                $box_content preg_replace_callback('!['.$result['name'].']!', array('this''run_module'), $box_content']); 
                ist mehr als falsch.

                Man kann übrigens auch Dateien anhängen, und muss nicht Code posten, den mal selbst mit 1280 Pixeln Breite nicht auf einem Bildschirm ohne horizontalem Scrollbalken haben kann...

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  hab syntax-highlighting im Editor...
                  Und ich sehe da keinen Fehler?
                  Wie gesagt, escapte-backslashes werden vom Forum entfernt, die sind drann, wenn du das meinst...

                  Sowas ist mir noch nie passiert, dass ich irgendwelche Hochkommafehler nicht sehe...
                  Zuletzt geändert von JeyDie; 01.08.2007, 19:34.

                  Kommentar


                  • #10
                    1. code umbrechen
                    2.schau dir mal das genau an:
                    PHP-Code:
                    $box_content preg_replace_callback('!['.$result['name'].']!', array('this''run_module'), $box_content']); 
                    gruß
                    peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar


                    • #11
                      so, hab die ersten Zeilen oben entfernt und die Zeilen umgebrochen
                      (besonders die Kommentare und die SQL-Querries)

                      Ich schau jetz nochma ganz genau auf die Hochkommas und ohrfeige mich dann am Ende am besten selber, wenn ich den Fehler dann endlich hab

                      edit: *ohrfeig*
                      hab jetz die eckige Klammer und das Hochkomma am Ende entfernt...
                      Warum ich das nicht gefunden habe, ist mir aber ein Rätsel!

                      Mein Editor ist scheinbar nicht so gut, wie ich dachte.
                      Er hat den darauffolgenden Code nicht als String dargestellt, warum auch immer...

                      Danke nochmal!
                      Komme vielleicht öfter vorbei, klasse Forum!
                      Zuletzt geändert von JeyDie; 01.08.2007, 19:46.

                      Kommentar

                      Lädt...
                      X