我有一个1.2mb的文件,里面有36k+行的文本,可能还在增长。问题是,我想显示input.txt中的所有行,但由于行太多,我在浏览器崩溃时得到了输出…到目前为止,我尝试的是:
<?php
$handle = fopen("input.txt", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
echo '<li class="list-group-item d-flex justify-content-between align-items-center">'.$line.'</li>';
}
fclose($handle);
} else {
echo 'error';
}
?>
这段代码适用于文件约40kb约1400KB的行任何更多的将导致崩溃。。。
在那之后,我想如果我把这个文件加载到db,然后连接php并从base获取数据,我就可以显示所有的行,但我又错了
<?php
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT ime_pjesme FROM pjesme";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo '<li class="list-group-item d-flex justify-content-between align-items-center">'. $row["ime_pjesme"].'</li>';
}
} else {
echo "0 results";
}
$conn->close();
?>
所以我的问题是,有没有什么方法可以让这些行显示在浏览器中,或者有没有方法加载这些行,然后显示50乘50等等?
1条答案
按热度按时间bihw5rsg1#
是的,有一种方法可以一页一页地显示文件。
有许多库可以很好地为您实现这一点,但是为了理解这些机制,下面介绍如何使用jquery库和一些php来实现这一点。
简单地说,你需要两个文件。第一个将显示页面计数器/选择器以及行将出现的区域。假设一次需要50行:
您可以组织css,使li元素都是漂亮的、居中的和水平的。然后使用jquery将事件处理程序附加到单击其中一个li,方法是在javascript中委托给父ul:
delegate函数对第二个php文件发出ajax post调用,并期望json回复(调用
reply
此处)待处理。上述操作将杀死div的内容,例如
<div id="lines"></div>
并用尽可能多的p来填充它,因为在装入器回复中有行。加载程序接收一个参数,即页码,将其转换为绝对行号,运行select并以json格式返回所有内容:
您将发现浏览器工具对于检查ajax调用的情况非常有用。“加载器”文件,您将能够回收以后与大多数niftier库。