我有一个很长时间工作的foreach循环,当所有项目都被处理时,它会在最后正确输出..
foreach ($matches[0] as $map_link) {
if ($map_link!='' && $i < $max_tags ) {
include('reg-process.php');
}
$i++;
}
infact为每个$ matches [0]超过600匹配它包括 &#39; REG-process.php&#39;依次处理每个匹配的页面,超过一个小时后,它完成并输出所有结果.. 我需要的是不要等到最后一项看到结果,所以当循环在每个项目处理后工作时它可以回显.. 所以我每次循环都包含&reghu了.php&#39;页面打印出来 结果,不要吵到最后一项,然后立刻打印出来......就像继续?
答案 0 :(得分:0)
include不应该以您使用它的方式使用,它应该用于包含功能或降低单个文件的复杂性,而不是将其误用为函数。首先,摆脱包含,因为这会在某个时间点导致问题(即,如果它包含函数,你不能多次包含一个文件)。
有不同的方式来获得你想要的东西,这里有两种可能性:
1。)基于文件的日志记录:
<?php
// file: register_process.php
function registerProgress($map_link)
{
// YOUR CODE
// ...
// assuming that the result of your code is a string variable that can be logged
file_put_contents('registration.log', $logResult, FILE_APPEND);
}
include('register_progress.php');
foreach ($matches[0] as $map_link) {
if ($map_link!='' && $i < $max_tags ) {
registerProgress($map_link);
}
$i++;
}
2。)切换到ajax:
如果您将脚本作为Web应用程序(而不是控制台应用程序)的一部分运行,则可以重写代码以在每个映射链接上执行一个页面请求。
优点:每次执行调用都会获得可见的结果,减少脚本内存使用,减少超时风险(由于PHP,Web服务器或浏览器超时)。
缺点:需要增加页面请求和代码重构。
ob_flush()
无效,因为浏览器无法解析待处理页面请求的内容;相反,你必须使用网络嗅探器来读取部分刷新的内容。
答案 1 :(得分:-1)
您没有使用正确的语法跟踪foreach格式。理想的代码如下 -
form
确保 $ matches [0] 是一个数组。没有数组,它将无法正常工作。只需重写您的代码,希望能正常工作。