给每个循环30秒的执行时间


give each loop 30 sec execution time

我的应用程序托管在Siteground的共享主机中。我构建了一个cron作业,它每天晚上执行一个php文件。问题是,该文件包含一个执行代码85次的主循环。更准确地说,我获取数据数组并对其进行操作。这一共做了85次。类似这样的东西:

<?php
$main_array = array("//85 elements");
foreach ($main_array as $var){
 $array1 = array ("//a lot of data");
//manipulate array1
}
?>

由于对所获取的数据有许多操作,因此完全执行需要2分钟5分钟。无论如何。。有没有办法为每个"foreach"循环设置30秒的执行时间??我不能转到专用主机,所以我需要想办法解决其他问题。。

感谢advace

使用microtime()来评估每个循环的运行时间。

<?php
$main_array = array("//85 elements");
foreach ($main_array as $var){
  $time_start = microtime(true);
  $array1 = array ("//a lot of data");
  //manipulate array1
  $time_end = microtime(true);
  $time = $time_end - $time_start;
  //check sometimes in your script whether execution time is reached
  if($time > 30){
    break; //or continue; which you want
  }
}
?>

http://php.net/manual/en/function.microtime.php

但是执行时间真的很长,酸脚本算什么?也许有更有效的方法可以做到这一点…

set_time_limit(30); //Enter the value in seconds

检查php 中的set_time_limit()

使用代码顶部的set_time_limit(0);函数。

PHP手册

这设置了允许脚本运行的最长时间(以秒为单位)在它被解析器终止之前。这有助于预防不良捆绑服务器时编写的脚本。默认设置为30。从命令行运行PHP时,默认设置为0。

最长执行时间不受系统调用、流的影响操作等。请参阅set_time_limit()函数了解更多信息详细信息。

在保险箱中运行时,不能使用ini_set()更改此设置模式唯一的解决方法是关闭安全模式或通过更改php.ini.中的时间限制

您的web服务器可以具有其他超时配置,这些配置也可能中断PHP执行。Apache有Timeout指令,IIS有CGI超时功能。两者都默认为300秒。查看您的web服务器有关具体细节的文档。

set_time_limit(999); // some number you want

试试这个。