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

Php 给每个循环30秒的执行时间,php,Php,我的应用程序托管在共享主机的Siteground中。我构建了一个cron作业,每天晚上执行一个php文件。问题是该文件包含一个主循环,该循环执行代码85次。更准确地说,我获取数据数组并对其进行操作。这是做了85次。 大概是这样的: <?php $main_array = array("//85 elements"); foreach ($main_array as $var){ $array1 = array ("//a lot of data"); //manipulate arra

我的应用程序托管在共享主机的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秒的执行时间?? 我无法移动到专用主机,所以我需要想出其他办法

谢谢你

set_time_limit(999); // some number you want
试试这个

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

在php中签入使用
设置时间限制(0)位于代码顶部的函数

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

最大执行时间不受系统调用、流的影响 操作等。有关详细信息,请参阅set_time_limit()函数 细节

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

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

使用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
  }
}
?>


但是执行时间真的很长,什么是sour脚本计算?也许有更有效的方法来实现这一点…

显示您的代码。我认为我们可以帮助提高性能。30秒后会发生什么?跳过脚本?如果数组的操作是分开进行的,您可以尝试将
$main_array
拆分为较小的数组,并运行cron作业五次,每次处理每个块。@MichalTrojalowski我以前考虑过这一点,但一次只能处理两个循环。在主数组中不超过2个元素的情况下,它可以正常工作。如果我在主数组中放入更多元素,结果会变得疯狂。而且我不能只做42个cron作业。
set_time_limit
可能会在具有严格资源策略的共享主机上被禁用。这个设置对整个脚本执行的时间限制,但他只想为每个循环设置它…@abimelex你说得对。我想为每个循环设置它。不是整个脚本。。哦,顺便说一句,我是一个“她”:)在粗线条中,我的脚本是这样做的:对于每个用户(主数组(user1,user2..user85);)->从服务器获取数据->将其放入数组->删除跳转(如果数组('3','4','99',3);'99'被认为是跳转)->规范化数据->再次删除跳转->在数据库中插入。但是有很多数据需要处理。只有一个循环(一个用户)需要6秒才能执行。您可以发布整个脚本,或者至少发布花费如此长时间的部分吗?(顺便说一句,很抱歉把你当成男性,我没有读你的名字)我尝试了你的解决方案,但没有成功:(我会发布我的代码,但它太长了。如果我将其作为我自己的答案发布。你们还可以发表评论吗?。我不太确定stackover的工作原理:/Stackoverflow特别像一个Wiki,所以只需编辑您的问题。发布答案只是用于解决问题。如果代码太长,请尝试找出需要花费太多时间的部分uch time和/或poste链接到外部宿主(如pastebin或github)的代码。部分变量使用我的母语,但大部分代码使用英语,注释也使用英语。