【问题标题】:Display next line on refresh/load在刷新/加载时显示下一行
【发布时间】:2013-06-05 22:10:28
【问题描述】:

我有一个文本文件,每次我的页面使用 php 加载时,我都能随机显示每一行。我想知道是否可以使用 PHP 代码在每次以与文本文件中相同的顺序加载页面时回显一个新行?

这是我到目前为止显示随机线的内容。现在我试图弄清楚如何在每次加载页面时每行循环遍历文本文件行

<?php
$f_contents = file("file.txt");
$line = $f_contents[array_rand($f_contents)];
echo $line."<br>";
?>

【问题讨论】:

  • 请向我们展示您的代码 :)
  • 您可以使用 SESSION 知道要加载哪一行。
  • 将文件行放在一个数据库中效率更高
  • 你能解决你的问题吗?我的意思是你现在得到了什么,你到底想要什么。如果可能,请也将代码分享给我们。
  • 每次加载页面时我都想在文本文件中显示下一行

标签: php


【解决方案1】:

一种方法是在读取每一行后获取文件中的当前位置(使用ftell()),将该位置保存在用户的session 中,并在读取之前恢复它(使用fseek())下一行。与使用file() 相比,它的优点是一次只需要将一行读入内存,而不是整个文件(尽管对文件所做的更改可能会导致部分行被读取,这是可以解决的如有必要)。

<?php

// Load session and open tips file
session_start();
$fp = fopen('README', 'r');

// Go to where we left off
if (isset($_SESSION['offset'])) {
    fseek($fp, $_SESSION['offset']);
}

// Read that line
$line = fgets($fp);
if ($line === false) {
    // Hit end of file; go back to the beginning
    fseek($fp, 0);
    $line = fgets($fp);
}

// Save the position of the next line and close the file
$_SESSION['offset'] = ftell($fp);
fclose($fp);

// Output the line
echo '<p>' . htmlspecialchars($line) . '</p>';

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点,具体取决于您希望如何呈现数据:

    要向不需要登录的用户发送一行,您可以将指针保留在 SESSION 中(尽管如果他们关闭浏览器,它将重置为零)或设置一个 cookie 作为指针,这将保留数据直到过期或被删除。

    对于登录的用户(比如一天的提示),您可以在数据库字段中记录他们在文件中的位置,并在需要一行时检索该信息。如果您不想使用数据库,也可以将数据保存在 xml 中。 这具有在任何计算机上工作的优势,但计算复杂一些。

    如果您的文件有很多行,则数据库表或 xml 文件将比遍历文本文件更有效。

    【讨论】:

      【解决方案3】:

      我认为你正在寻找这样的东西:

      <?php
      $line_number = isset($_SESSION['LINE_NO']) ? $_SESSION['LINE_NO'] + 1 : 1;
      $_SESSION['LINE_NO'] = $line_number;
      $f_contents = file("file.txt");
      $line = $f_contents[$line_number];
      echo $line."<br>";
      ?>
      

      如果有什么不清楚的地方,我很乐意提供帮助

      【讨论】:

      • 一开始不需要session_start() 吗?
      • 我正在尝试你的代码,每次加载时它都会在我的文本文件中显示我的第二行
      • 这是正确的先生,答案永远不会是完整的解决方案,他们是为了帮助这个想法
      • @AndrewGarcia 检查您的会话是否已启用
      猜你喜欢
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2012-09-16
      • 1970-01-01
      • 2014-03-10
      • 2021-07-19
      相关资源
      最近更新 更多