我有一个文本文件,每次我的页面使用 php 加载时,我都能随机显示每一行。我想知道是否可以使用 PHP 代码在每次以与文本文件中相同的顺序加载页面时回显一个新行?
到目前为止,这就是我要显示的随机线。现在我试图弄清楚如何在每次加载页面时每行循环遍历文本文件行
<?php
$f_contents = file("file.txt");
$line = $f_contents[array_rand($f_contents)];
echo $line."<br>";
?>
我有一个文本文件,每次我的页面使用 php 加载时,我都能随机显示每一行。我想知道是否可以使用 PHP 代码在每次以与文本文件中相同的顺序加载页面时回显一个新行?
到目前为止,这就是我要显示的随机线。现在我试图弄清楚如何在每次加载页面时每行循环遍历文本文件行
<?php
$f_contents = file("file.txt");
$line = $f_contents[array_rand($f_contents)];
echo $line."<br>";
?>
一种方法是ftell()
在读取每一行后获取文件中的当前位置(使用),将该位置保存在用户的会话fseek()
中,并在读取下一行之前恢复它(使用)。与 using 相比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>';
我认为你正在寻找这样的东西:
<?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 中(尽管如果他们关闭浏览器,它将重置为零)或设置一个 cookie 作为指针,它将保留数据直到它过期或被删除。
对于登录的用户(比如一天的提示),您可以在数据库字段中记录他们在文件中的位置,并在需要一行时检索它。如果您不想使用数据库,也可以将数据保存在 xml 中。这具有在任何计算机上工作的优点,但在计算上有点复杂。
如果您的文件有很多行,那么数据库表或 xml 文件将比遍历文本文件更有效。