1

我目前正在开发一个新项目,我希望从文本文件中获取“描述”并显示它。到目前为止,这是我的代码,但我在第 11 行(使用包含)做错了,我相信这是一个非常菜鸟的问题,但如果有人能修复它,那就太好了。

这是我的代码:

<?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>
" 
;
}

复制到pastebin

4

4 回答 4

1

用这一行替换这两行。

<h3 class=\"tile-title\">" . $resdir . "</h3>
<p>"; echo  include('resources/'.$_GET['Mydir'].'description.txt'); echo "</p>
于 2013-05-29T18:44:09.570 回答
0

另一种选择是读取文件

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

while(!feof($file))
  {
  echo fgets($file). "<br>";
  }
fclose($file);
于 2013-05-29T18:44:44.440 回答
0

看起来您正在尝试连接,而包含无法做到这一点。基本上你会让他们像这样 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>";
}
于 2013-05-29T18:44:23.133 回答
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

我会注意到,上面的代码可以允许任何人读取Web 服务器可以访问的任何文件,方法是..在 的值中包含$_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);

?>
于 2013-05-29T18:56:27.603 回答