无法在生成的 php 代码中设置变量
Can't set variable in generated php code
我有一个生成 3 个文件的 php 脚本:
- 一个
.txt
文件
- 一个
.php
文件
脚本工作正常,但有一件事破坏了田园诗,脚本没有在第二个生成的脚本中写入变量(我也试过 . $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>"
?>
您正在使用超级字符串格式来构建您的字符串。
超字符串表示双引号"".
此处
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>
');
PHP 将这些术语“$filenamebes”“$zerlegen”视为实际变量。
因为这些变量不存在,所以它不会向文件写入任何内容。
相反,您应该像这样转义这些变量:$filenamebes
。这将允许您将 $filenamebes
物理写入文件,而不是让 PHP 搜索其值(空)。
概念验证:
<?php
$a = 'test';
$s = "$a";
echo $s ."\n"; //will print '$a'
echo "---\n";
$s = "$a";
echo $s ."\n"; //will print 'test'
我有一个生成 3 个文件的 php 脚本:
- 一个
.txt
文件 - 一个
.php
文件
脚本工作正常,但有一件事破坏了田园诗,脚本没有在第二个生成的脚本中写入变量(我也试过 . $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>"
?>
您正在使用超级字符串格式来构建您的字符串。 超字符串表示双引号"".
此处
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>
');
PHP 将这些术语“$filenamebes”“$zerlegen”视为实际变量。
因为这些变量不存在,所以它不会向文件写入任何内容。
相反,您应该像这样转义这些变量:$filenamebes
。这将允许您将 $filenamebes
物理写入文件,而不是让 PHP 搜索其值(空)。
概念验证:
<?php
$a = 'test';
$s = "$a";
echo $s ."\n"; //will print '$a'
echo "---\n";
$s = "$a";
echo $s ."\n"; //will print 'test'