无法在生成的PHP代码中设置变量

时间:2015-10-01 05:22:14

标签: php file variables dynamic generated

我有一个生成3个文件的PHP脚本:

  1. .txt档案
  2. .php档案
  3. 脚本工作正常,但有一件事破坏了田园诗,脚本没有在第二个生成的脚本中编写变量(我也试过. $var .)。任何帮助将不胜感激。

    守则:

        <?php
    $filename = uniqid(rand(), true) . '.php';
    
    $fh = fopen($filename, "w+");
    if($fh)
    {
        fwrite($fh, "<html><body>
            <div align='center'>
            Neue Nachricht erstellen<br><br>
    
            <form action='' . $filenamebes . '' Method='post'>
    
            Titel:<br>
            <input name='Name' size='40'><br><br>
    
            Inhalt:<br>
    
            <textarea name='inhalt' cols='40' rows='12'
            wrap='physical'></textarea><p>
            <input type='submit' value='Absenden'>
            </form><br><br>
                        <?php
                        $beitrag = file('' . $filenametxt . '');
                        krsort($beitrag);
    
                        foreach($beitrag as $ausgabe)
                           {
                           $ausgabe = stripslashes($ausgabe);
                           $zerlegen = explode('|', $ausgabe);
    
                           echo '
                           <table align=\'center\'
                            border=\'1\' cellspacing=\'0\'
                           cellpadding=\'5\' bordercolorlight=\'black\'
                           bordercolordark=\'black\' width=\'50%\'>
                           <tr>
                           <td>
                          Titel: <a href=\'mailto:$zerlegen[0]\'>$zerlegen[1]</a>
                          am $zerlegen[2]
                           </td>
                           </tr>
    
                           <tr>
                           <td>
                           $zerlegen[3]
                           </td>
                           </tr>
                           </table><br>
                           ';
                           }
                        ?>
                    </div>
    </body>
    </html>
    ");
    }
    fclose($fh);
    
    
    $filenametxt = uniqid(rand(), true) . '.txt';
    $fhtxt = fopen($filenametxt, "w+");
    if($fhtxt)
    {
        fwrite($fhtxt, "");
    }
    fclose($fhtxt);
    
    
    $filenamebes = uniqid(rand(), true) . '.php';
    
    $fhbes = fopen($filenamebes, "w+");
    if($fhbes)
    {
        fwrite($fhbes, "<html>
    <head>
    <title>Speichere Nachricht</title>
    </head>
    <body>
    
    <?php
    $user = {$_POST['Name']};
    $user = htmlentities($user);
    
    $inhalt = {$_POST['inhalt']};
    $inhalt = htmlentities($inhalt);
    $inhalt = str_replace('\n', '<br>', $inhalt);
    
    $email = {$_POST['EMail']};
    $email = htmlentities($email);
    
    if ($inhalt == '' or $user == '')
       {
       echo 'Sie müssen das Feld \'Namen\'
       und \'Inhalt\' ausfüllen';
       }
    
    else
       {
       $datum= date('d.m.Y H:i:s');
    
       $eintrag='$email|$user|$datum|$inhalt';
    
       $datei = fopen('' . $filenametxt . '', 'a');
       fwrite($datei, '\n'.$eintrag);
       fclose($datei);
    
       echo 'Ihre Nachricht wurde erfolgreich gespeichert';
       }
    ?>
    
    <br>
    <a href='' . $filename . ''>Zurück</a>
    </body>
    </html>");
    }
    fclose($fhbes);
    
    
    echo "PHP = $filename TXT = $filenametxt BES = $filenamebes <br><br><a href='".$filename."'>ÖffnenPHP</a> <br><br><a href='".$filenametxt."'>ÖffnenTXT</a> <br><br><a href='".$filenamebes."'>ÖffnenBES</a>"
    ?>
    

2 个答案:

答案 0 :(得分:1)

您正在使用超级字符串格式来构建字符串。 超级字符串表示双引号&#34;&#34;。

这里

fwrite($fh, "<html><body>

并以超级字符串格式使用php变量。所以php将变量识别为字符串或其包含的任何内容

前:

$a="ABCD";
echo "$a"; // this will print ABCD

但是当你这样做时

$a="ABCD";
echo '$a';// this will print $a

这是解决方案

    fwrite($fh, '<html><body>
        <div align="center">
        Neue Nachricht erstellen<br><br>

        <form action=" . $filenamebes . " Method="post">

        Titel:<br>
        <input name="Name" size="40"><br><br>

        Inhalt:<br>

        <textarea name="inhalt" cols="40" rows="12"
        wrap="physical"></textarea><p>
        <input type="submit" value="Absenden">
        </form><br><br>
                    <?php
                    $beitrag = file(" . $filenametxt . ");
                    krsort($beitrag);

                    foreach($beitrag as $ausgabe)
                       {
                       $ausgabe = stripslashes($ausgabe);
                       $zerlegen = explode("|", $ausgabe);

                       echo "
                       <table align=\"center\"
                        border=\"1\" cellspacing=\"0\"
                       cellpadding=\"5\" bordercolorlight=\"black\"
                       bordercolordark=\"black\" width=\"50%\">
                       <tr>
                       <td>
                      Titel: <a href=\"mailto:$zerlegen[0]\">$zerlegen[1]</a>
                      am $zerlegen[2]
                       </td>
                       </tr>

                       <tr>
                       <td>
                       $zerlegen[3]
                       </td>
                       </tr>
                       </table><br>
                       ";
                       }
                    ?>
                </div>
</body>
</html>
');

答案 1 :(得分:1)

PHP将这些术语“$ filename”“$ zerlegen”视为实际变量。

因为这些变量不存在,所以它不会向文件写入任何内容。

相反,你应该逃避这些变量:\$filenamebes。这将允许您物理地将$filenamebes写入文件,而不是PHP搜索其值(null)。

概念证明:

<?php
$a = 'test';
$s = "\$a"; 
echo $s ."\n";  //will print '$a'

echo "---\n";

$s = "$a";
echo $s ."\n"; //will print 'test'