我需要在Apache服务器上生成一个巨大的PDF文件,这实际上需要相当长的时间。这分两步完成:
检查数据的正确性和可用性 - 我们假设这需要1秒钟。
从随机资源中收集更多数据,构建并保存庞大的PDF文件。我们假设这需要40秒。
客户端向服务器发送一个AJAX-Request,并为其提供一些在第一步中检查的数据。请求的代码如下所示 - >
$.ajax({
type: "post",
url: "./FinalPage.php",
data: { CustomerID: IDInput, Link: LinkInput, ..., ...},
success: function(Answer) {
console.log(Answer);
if (Answer == "OK"){
window.location.reload();
} else {
alert("Something Went Wrong: " + Answer);
}
}
})
服务器现在应该开始处理步骤1并检查给定的数据。如果一切正常,服务器会回复“OK” - 如果没有,服务器会向用户发出异常消息。服务器上使用的PHP代码看起来像这样......
ob_start();
@ini_set("memory_limit",'500M');
ignore_user_abort(true);
set_time_limit(1200);
header("Content-Encoding: none");
$Message = "OK";
if (!DataCorrect){
$Message = "You made a mistake.";
}
//Let's assume something else happens here
usleep(2000000);
echo $ErrorMsg;
header('Connection: close');
header('Content-Length: '. ob_get_length());
ob_end_flush();ob_flush();flush();
if(session_id()){session_write_close();}
//Client should have now recieved "OK" or a failure message - the 40 seconds part begins now.
usleep(40000000);
echo "DONE";
问题是我实际上希望客户端在一秒钟之后收到“OK” - 消息。现在客户端应该重新加载页面,而php脚本继续执行40秒部分。然而,客户端等待41秒才能收到“OK”然后重新加载 - “DONE”没有出现,但它也会一直等到脚本执行完毕。
我非常感谢任何帮助以及关于我可能做错的想法 - 提前感谢。顺便说一句:这些都是非常简约的例子,请不要过于严肃地对编码惯例采取行动。