1. #1

    Registriert seit
    18.03.2013
    Beiträge
    481
    Thanked 264 Times in 168 Posts

    Standard [PHP] Probleme mit eval

    Hey,

    ich habe da ein paar Probleme mit der eval()-Funktion, die ich nicht nachvollziehen kann.


    Folgendes funktioniert:
    PHP-Code:
    <?php
        $string 
    "fucking";
        
    $shit "shit";

        
    $str 'This is a $string $shit function!';
        echo 
    $str"<br>";

        eval(
    "\$str = \"$str\";");
        echo 
    $str;
    ?>
    Soweit so gut. Jetzt dachte ich, ich kann so auch ganz einfach ein Array mit verwenden. Habe also folgendes gemacht:
    PHP-Code:
    <?php
        $lang 
    getLanguageKeys();

        
    $str "This is a $lang['key1'] $lang['key2'] function!";
        echo 
    $str"<br>";

        eval(
    "\$str = \"$str\";");
        echo 
    $str;


        function 
    getLanguageKeys() {
            
    $lang['key1'] = 'fucking';
            
    $lang['key2'] = 'shit';
            return 
    $lang;
        }
    ?>
    Und schon gehts nicht mehr. Kann mir jemand sagen, wie ich das am besten machen kann? Meine Funktion "getLanguageKeys" gibt mir ein Array mit allen Sprachfeldern aus der Datenbank zurück. Und ehrlich gesagt hab ich keine Lust, für jeden String einen str_replace machen zu müssen.

    Kann mir hier jemand helfen?



    [www.piratenpartei.de]
    "Krieg ist Frieden; Freiheit ist Sklaverei; Unwissenheit ist Stärke"

  2. #2

    Registriert seit
    17.07.2014
    Beiträge
    50
    Thanked 26 Times in 16 Posts

    Standard AW: [PHP] Probleme mit eval

    Never ever do that
    PHP-Code:
    $str "This is a $lang['key1'] $lang['key2'] function!"
    Bitte so schreiben:
    PHP-Code:
    $str 'This is a '.$lang['key1'].' '.$lang['key2'].' function!'
    Erstens sauberer, zweitens schneller.


    Dann empfehle ich, nicht eval zu nutzen. Würde die Sachen cachen in einer Datei und dann includen. Eval sollte wenn möglich, nie genutzt werden.
    Geändert von BeTwo (03.08.2014 um 11:18 Uhr)

  3. #3

    Registriert seit
    18.03.2013
    Beiträge
    481
    Thanked 264 Times in 168 Posts

    Standard AW: [PHP] Probleme mit eval

    Hintergrund, warum ich eval() benutzen muss:

    Ich habe eine Template-Datei (design.tpl), damit ich Änderungen am Design immer nur an einer Stelle durchführen muss. Diese binde ich in der PHP-Datei mittels
    PHP-Code:
    echo implode(''file('design.tpl')); 
    ein und gebe sie so aus. Zuvor habe ich einzelne Platzhalter darin gehabt, die ich noch mittels str_replace() manuell ersetzt habe. Allerdings würde der Umbau auf eine multilinguale Seite den Rahmen sprengen, ich müsste etwa 25 Stellen replacen. Und das wird extrem unübersichtlich.

    Das mit dem String oben war nur ein Beispiel. Ich habe es mit der Datei jetzt hinbekommen.

    design.tpl
    HTML-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    	<title>Test</title>
    </head>
    <body>
    	This is a {$lang['key1']} {$lang['key2']} function!
    </body>
    </html>

    test.php
    PHP-Code:
    <?php
        $lang 
    getLanguageKeys();

        
    $str implode(''file('test2.tpl'));
        
        eval(
    "\$str = \"$str\";");
        echo 
    $str;


        function 
    getLanguageKeys() {
            
    $lang['key1'] = 'fucking';
            
    $lang['key2'] = 'shit';
            return 
    $lang;
        }
    ?>

    Jetzt kann ich meine Seite darauf anpassen. Danke dennoch für deine Antwort BeTwo.
    Geändert von xOneDirectionx (03.08.2014 um 15:02 Uhr)



    [www.piratenpartei.de]
    "Krieg ist Frieden; Freiheit ist Sklaverei; Unwissenheit ist Stärke"

  4. #4
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.213
    Thanked 9.132 Times in 3.006 Posts
    Blog Entries
    5

    Standard AW: [PHP] Probleme mit eval

    Warum benutzt du keine Template-Engine wie z.B. Smarty?

    Template
    HTML-Code:
    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <title>{$phrase.pageTitle}</title>
    </head>
    
    <body>
        {$phrase.someText}
    </body>
    </html>
    Ausgabe
    PHP-Code:
    $smarty = new Smarty;
    $smarty->assign('phrase'loadLanguage());
    $smarty->display('test.tpl'); 
    Wobei ich dafür ein kleines Smarty-Plugin nutzen würde (musst du ggf. anpassen):
    PHP-Code:
    class TemplateHelper {
        
    /**
         * Fügt über {phrase name="PHRASENNAME"} eine Phrase ins Template ein (optional: weitere Parameter zur Ersetzung, Beispiel: {phrase name="TestPhrase" xy="123"} | Phrase: 'Testwert: {xy}' => 'Testwert: 123'
         * @param array $params Parameter, mit denen die Funktion aufgerufen werden
         * @param object $smarty Smarty-Instanz
         * @return Phrase mit ersetzten Platzhaltern, sofern vorhanden
         */
        
    public static function phrase($params$smarty) {
            
    $phraseValue Phrase::get($params['name']);
            if(
    strlen($phraseValue) == 0)
                return 
    '';
            unset(
    $params['name']);
            
    // Optionale Parameter setzen
            
    foreach($params as $key => &$value) { 
                if(
    $value == null)
                    
    $value '';
                    
    $phraseValue str_replace('{' $key '}'$value$phraseValue);
            }
            return 
    $phraseValue;
        }

    PHP-Code:
    $smarty->registerPlugin('function''phrase', array('TemplateHelper''phrase')); 
    Du sparst dir Arbeit und bist flexibel. Über die interne Verarbeitung der Variablen musst du dir keine Gedanken machen, sondern sie lediglich im jeweiligen Template registrieren.


  5. The Following User Says Thank You to DMW007 For This Useful Post:

    xOneDirectionx (04.08.2014)

Ähnliche Themen

  1. Bot Probleme
    Von koppaz1337 im Forum Allgemeiner Bot-Bereich
    Antworten: 0
    Letzter Beitrag: 08.07.2013, 16:48
  2. DHL Probleme? (Nicht zugestellte Sendungen)
    Von Bartek im Forum RealLife
    Antworten: 11
    Letzter Beitrag: 03.01.2013, 20:52
  3. VB.Net VB.net - 2 Probleme
    Von Gangstersheep im Forum .Net
    Antworten: 5
    Letzter Beitrag: 25.07.2012, 17:20
  4. 2 Probleme mit dem PC!
    Von Microsoft im Forum Hardware
    Antworten: 24
    Letzter Beitrag: 05.07.2012, 23:17
  5. Cod: Mw3 Probleme
    Von Salvos im Forum Sonstige Games
    Antworten: 0
    Letzter Beitrag: 20.11.2011, 16:37
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.