Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit preg_replace_callback

Einklappen

Neue Werbung 2019

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

  • freq.9
    hat ein Thema erstellt Problem mit preg_replace_callback.

    Problem mit preg_replace_callback

    Ich habe mit meinem kleinen Parser ein kleines Problem. Er streikt bei diesen Sachen hier:

    Fehlermeldung:
    Warning: preg_replace_callback() requires argument 2, 'getContent', to be a valid callback in C:\Server\www\ws\inc\class.inc.php on line 37

    /* inc/class.inc.php */
    Code:
    <?php
    
    class Parser
    {
    
        /* ... */
    
        /* getFile() - liest die .html Datei aus */
        /* Display() - ruft Standards() auf und return´d die geparste Datei */
    
    	function getContent ($file)
    	{
    		ob_start();
    		include($file);
    		return ob_get_content();
    	}
    	
    	function Standards ()
    	{	
    		$output = $this->input;
    		$output = preg_replace('/{date:(.+)}/e', 'date(\'$1\');', $output);
    		$output = preg_replace_callback('/{include:(.+)}/e', 'getContent', $output); // line 37
    		$this->input = $output;
    		return $this->input;
    	}
    
        /* ... */
    
    }
    
    ?>
    /* index.php */
    Code:
    <?php
    
    include('inc/class.inc.php');
    $main = new Parser();
    $main->getFile('main.html');
    echo $main->Display();
    
    ?>
    /* main.html */
    Code:
    <html>
    <head>
     <title>test</title>
    </head>
    <body>
    {include:test.html}
    </body>
    </html>

  • freq.9
    antwortet
    okay indirekt hab ichs nun, wenn ich include($file[1]) mache, weil $file[0] = "{include:test.html}" ist...
    Nur ich bekomm den Inhalt der test.html 2 mal ausgegeben :!

    // Edit:
    bei so einer test.html:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
     <title>Moin</title>
    </head>
    <body>
     {date:d.m.Y}
    
     {include:templates/test.html}
    </body>
    </html>
    bekomm ich:

    fdshdndyd 07.07.2004
    fdshdndyd
    also ist das 1ste falsch... (fdshds.. is der inhalt der test.html :P)

    // Edit 2:
    bei mehreren {include:...}´s kommt:
    Warning: getcontent(templates/test.html}

    {include:templates/test.html): failed to open stream: No such file or directory in C:\Server\www\ws\inc\class.inc.php on line 29

    Warning: getcontent(): Failed opening 'templates/test.html}

    {include:templates/test.html' for inclusion (include_path='.;c:\php4\pear') in C:\Server\www\ws\inc\class.inc.php on line 29
    und nen var_dump auf $file bringt das:
    array(2) {
    [0]=>
    string(76) "{include:templates/test.html}



    {include:templates/test.html}"
    [1]=>
    string(66) "templates/test.html}



    {include:templates/test.html"
    }
    alias ich kann das $file[1] nicht lassen aber irgendwas muss ich da doch machen :!

    Einen Kommentar schreiben:


  • Guradia
    antwortet
    $this ist der Verweis auf das Objekt ..

    $this->getContent();

    So würdest du es innerhalb des Objekts auch selbst aufrufen.
    Als Callback wird das ebenfalls so gemacht, allerdings übergibst du mit $this erstmal eine Kopie .. mit &$this gibst du eine Referenz weitern (bessere Idee)


    In getContent() sollte du dir mal über
    print '<pre>';
    var_dump($file);
    print '</pre>';
    anschauen, was da übergeben wird. ist nämlich nicht, was du denkst ^^

    Einen Kommentar schreiben:


  • freq.9
    antwortet
    Naja... will auch ned...
    Code:
    		$output = preg_replace_callback('/{include:(.+)}/e', array($this,'getContent'), $output); // line 37
    mit dem delemiter /e gehts ned...
    Warning: /e modifier cannot be used with replacement callback in C:\Server\www\ws\inc\class.inc.php on line 38
    dann hab ichs mal mit /si (oder nur "/") getestet:
    Code:
    		$output = preg_replace_callback('/{include:(.+)}/si', array($this,'getContent'), $output); // line 37
    nun kommt:
    Notice: Array to string conversion in C:\Server\www\ws\inc\class.inc.php on line 29

    Warning: getcontent(Array): failed to open stream: No such file or directory in C:\Server\www\ws\inc\class.inc.php on line 29

    Warning: getcontent(): Failed opening 'Array' for inclusion (include_path='.;c:\php4\pear') in C:\Server\www\ws\inc\class.inc.php on line 29


    Notice: Array to string conversion in C:\Server\www\ws\inc\class.inc.php on line 29

    Warning: getcontent(Array): failed to open stream: No such file or directory in C:\Server\www\ws\inc\class.inc.php on line 29

    Warning: getcontent(): Failed opening 'Array' for inclusion (include_path='.;c:\php4\pear') in C:\Server\www\ws\inc\class.inc.php on line 29
    // Edit:
    wieso denn überhaupt Array() und was is $this?

    Einen Kommentar schreiben:


  • DiBo33
    antwortet
    Code:
    $output = preg_replace_callback('/{include:(.+)}/e', array($this,'getContent'), $output); // line 37

    Einen Kommentar schreiben:

Lädt...
X