我应该如何正确格式化包含中的变量?

时间:2013-05-29 18:37:48

标签: php include

我目前正在开发一个新项目,我希望从文本文件中获取“描述”并显示它。这是我的代码到目前为止,但我在第11行做了一些错误(使用include),我确信这是一个非常 noobie问题,但是如果有人能解决这个问题就会很棒。< / p>

这是我的代码:

<?php
$dir = 'resources/';

foreach(glob($dir.'*', GLOB_ONLYDIR) as $resdir) {
    $resdir = str_replace($dir, '', $resdir);
    echo "
<div class=\"span3\">
<div class=\"tile\">
<img src=\"resources/" . $resdir . "/thumbnail.png\" class=\"img-rounded\">
<h3 class=\"tile-title\">" . $resdir . "</h3>
<p>" include('resources/'.$_GET['resdir'].'description.txt'); "</p>
<a class=\"btn btn-primary btn-large btn-block\" href=\"http://www.baboonhut.com/resources/"  . $resdir . "/\">More Information</a>
</div>
</div>
" 
;
}

copy on pastebin

4 个答案:

答案 0 :(得分:1)

用这一行替换两行。

<h3 class=\"tile-title\">" . $resdir . "</h3>
<p>"; echo  include('resources/'.$_GET['Mydir'].'description.txt'); echo "</p>

答案 1 :(得分:0)

看起来您正在尝试连接,而您无法使用include进行连接。基本上你会这样做3个不同的陈述:

<?php
$dir = 'resources/';

foreach(glob($dir.'*', GLOB_ONLYDIR) as $resdir) {
    $resdir = str_replace($dir, '', $resdir);
    echo "<div class=\"span3\">
    <div class=\"tile\">
    <img src=\"resources/" . $resdir . "/thumbnail.png\" class=\"img-rounded\">
    <h3 class=\"tile-title\">" . $resdir . "</h3>
    <p>";

    include('resources/'.$_GET['Mydir'].'description.txt'); 

    echo "</p>
    <a class=\"btn btn-primary btn-large btn-block\" href=\"http://www.baboonhut.com/resources/"  . $resdir . "/\">More Information</a>
    </div>
    </div>";
}

答案 2 :(得分:0)

另一种选择是读取文件

$file = fopen('resources/'.$_GET['Mydir'].'description.txt', "r") or exit("Unable to open file!");

while(!feof($file))
  {
  echo fgets($file). "<br>";
  }
fclose($file);

答案 3 :(得分:0)

您可以使用两个单独的echo语句或?> ... <?php语法:

    ?>
<div class="span3">
<div class="tile">
<img src="resources/<?php echo $resdir; ?>/thumbnail.png" class="img-rounded">
<h3 class="tile-title"><?php echo $resdir; ?></h3>
<p><?php include('resources/'.$_GET['Mydir'].'description.txt'); ?></p>
[...]
    <?php

我会注意到,上面的代码可以允许任何人{@ 3}}访问网络服务器,方法是将..包含在$_GET['Mydir']的值中(并将空字节转义为%00,用于读取未以.txt结尾的文件。

此外,如果文本文件包含用户输入,则可能允许攻击者在服务器上执行任意PHP代码(例如以使用它来发送垃圾邮件)。更好的是做这样的事情:

<?php

    $mydir = $_GET['Mydir'];
    if (preg_match('/[^A-Za-z0-9]/', $mydir)) {
        die('Invalid directory name; must consist of only letters and digits');
    }
    $contents = file_get_contents("resources/$mydir/description.txt");
    if ($contents === false) {
        die('Failed to read file');
    }
    echo htmlspecialchars($contents);

?>