Php 在长mysql语句运行时输出文本
我试图让输出缓冲工作,但页面只是坐在原始内容,直到它已经完成执行 php我建议使用“拆分查询解决方案”。 这意味着您从一个只影响查询的前1000行的查询开始。。 一旦脚本完成,它会自动重定向到执行第1000到2000行的脚本,依此类推,直到所有行都完成。 通过这种方式,您可以不断地向用户反馈操作,“纺车”问题就消失了Php 在长mysql语句运行时输出文本,php,mysql,output,Php,Mysql,Output,我试图让输出缓冲工作,但页面只是坐在原始内容,直到它已经完成执行 php我建议使用“拆分查询解决方案”。 这意味着您从一个只影响查询的前1000行的查询开始。。 一旦脚本完成,它会自动重定向到执行第1000到2000行的脚本,依此类推,直到所有行都完成。 通过这种方式,您可以不断地向用户反馈操作,“纺车”问题就消失了 它不漂亮,但很简单,而且很有效。对于需要向用户输出的长时间运行的脚本,它为我解决了这个问题。您在最后一行中有一个语法错误:是在这个代码示例中还是在您的实际代码中$execution
它不漂亮,但很简单,而且很有效。对于需要向用户输出的长时间运行的脚本,它为我解决了这个问题。您在最后一行中有一个语法错误:是在这个代码示例中还是在您的实际代码中
$execution\u time'
。您应该使用Ajax,并在网页中发布表单。您可以输出文本(如果您的情况可能的话),然后通过图像标记通过php调用执行sql。这至少适用于所有其他缓存/刷新选项。@tobias kun是的,正如我复制的一样,除了输出和超时之外,脚本工作正常
<html>
<body>
<form action="importscript.php" method="post" enctype="multipart/form-data">
<p>File: <input type="file" name="import" /></p>
<p><input type="submit" value="Import" /></p>
</form>
</body>
<?php
ob_start();
set_time_limit(0);
$lines = get contents of file that was submitted - about 50,000 lines on average
echo "Importing - " . count($lines) . " rows<br />"; //I want to show this data
ob_flush();
$sql = <<<SQL
INSERT INTO data (date,time,duration)
VALUES(:date,:time,:duration);
SQL;
$sth = $db->prepare($sql);
$sth->bindParam(':date', $date, PDO::PARAM_STR);
$sth->bindParam(':time', $time, PDO::PARAM_STR);
$sth->bindParam(':duration', $duration, PDO::PARAM_STR);
$execution_time = microtime();
foreach ($lines as $line) {
$lin = str_replace('"','',$line);
$parts = explode(',',$lin);
$parts[0] = str_replace('/', '-', $parts[0]);
$counter++;
$date = $parts[0];
$time = $parts[1];
$duration = $parts[2];
$ex = $sth->execute();
}
$execution_time = microtime() - $execution_time;
$execution_time = sprintf('It took %.5f sec', $execution_time);
echo 'Query Finished. ' . $execution_time' . '<br /><a href="file1.php/">RESET</a>';
ob_flush(); //output this
?>