在php脚本准备下载文件时添加加载条


Adding a loading bar while php script is preparing a file for download

我是php的新手,但已经设法创建了一个页面,我叫"welcome.php",从一个表单中获取您的姓和名,然后将这些放在一个简单的文本文件中,并将其发送回您下载:

<?php 
if ($_POST) {
    header("Content-Type: application/txt");
    header('Content-Disposition: attachment; filename="welcome.txt"');
    echo "Welcome, ";
    echo $_POST['firstName']. " " . $_POST['lastName']; 
    // exit the script to make the form not appear in the downloaded file
    exit;
}
?>
<form action="" method="post">
First Name:  <input type="text" name="firstName" /><br />
Last Name: <input type="text" name="lastName" /><br />
<input type="submit" name="submit" value="Submit me!" />
</form>

我想做的是在生成文本文件时添加进度条,当弹出"保存文件"对话框时达到100%。我知道在这种情况下加载时间非常短,但我稍后会修改它以生成更大的文本文件。我想知道你是否可以指出我在正确的方向或提供几行代码来帮助,在我的脑海中,我只学习php 2天。我相信你可以使用一个叫flush的东西,但我不知道如何将它集成到我的页面中。谢谢!

请注意,我的页面也有一个小故障,文本文件也输出表单的html,有人知道如何阻止这种情况发生吗?

实际上,PHP并没有提供这样的特性。

要显示进度条,您可以这样做:

  • 在执行长时间运行的文件生成过程时,在当前用户会话

  • 中保存percentage-done值
  • 在显示下载表单的页面上,添加一个iFrame,它调用progress.php脚本

  • progress.php脚本需要生成网页,需要自动加载

  • progress.php脚本需要从会话中读取当前的进度值并绘制一个进度条图形,它直观地表示进度

虽然这是一个仅使用php的解决方案,但您可以使用JS/AJAX准备另一个。

HTML的自动加载应该是这样的:

<meta http-equiv="refresh" content="1; URL=http://myServer.com/progress.php">

你可以使用http://jqueryui.com/demos/progressbar/,它是基于JavaScript的,你可以通过AJAX发送你的进度,就像Stefan说的。