PHP:包含时反转/反转文件行顺序或使用fwrite写入时

时间:2013-05-28 16:05:53

标签: php include fopen reverse fwrite

我创建了一个小模块,允许用户在进入网页时添加小信息。为此,它将它们写入html文档(msg.html),然后在页面中将其包含()到div中。

我最大的问题是我不知道如何制作结果文件,用include()显示,以显示最新的第一个等等...我尝试更改fopen属性(a ,r,b,c,cb +,etccccc),但没有任何稳定。

对于我如何看待它,我应该将php表单写入文件,将ALWAYS添加到最顶行,这样include()将正常显示文件,最新的文件显示为第一个。

或者,我可以制作某种反转数组并包含()或回显“反转”内容。 无论哪种方式,我都没有足够的知识来实现​​这一目标。

这是我的代码:

<?php

if (isset($_POST['msg'])) {

    $usr = preg_replace('/[^a-zA-Z0-9]/', '',$_POST['usr']);
    $msg = $_POST['msg'];

    if (empty($usr)) {
        $usr = "Anonymous";
    }

    if (!empty($msg)) {
        $fsp = fopen('msg.html', "ab+"); 
        fwrite($fsp, '<tr><td class="info"><span class="usr">'. $usr .'</span><br><span class="dat">'. date("F j, Y, H:i ") .'</span></td><td>'. $msg ."</td></tr>\n");
        fclose($fsp);
        unset($_POST['msg']);
        unset($_POST['usr']);
    }
}

?>

<form method="post" action="#">
    <div id="comments">
        <h3>Messages</h3>
        <table>
            <tr><td>Name:</td><td><input type="text" id="usr" name="usr"></td></tr>
            <tr><td>Message:</td><td><textarea id="msg" name="msg"></textarea></td></tr>
            <tr><td></td><td><input type="submit" value="Add message!"></td></tr>
        </table>

        </table>
        <table id="ccc">
            <?php include('msg.html'); ?>
        </table>
    </div>
</form>

1 个答案:

答案 0 :(得分:2)

由于你谨慎地在每一行的末尾放置换行符,你可以这样做而不是包括:

$arr = file('msg.html');
echo implode("", array_reverse($arr));

我在这里可以看到的唯一问题是,您需要确保消息本身中不存在换行符。所以改变

fwrite($fsp, '<tr><td class="info"><span class="usr">'. $usr .'</span><br><span class="dat">'. date("F j, Y, H:i ") .'</span></td><td>'. $msg ."</td></tr>\n");

fwrite($fsp, '<tr><td class="info"><span class="usr">'. nl2br($usr) .'</span><br><span class="dat">'. date("F j, Y, H:i ") .'</span></td><td>'. nl2br($msg) ."</td></tr>\n");