3

我的应用程序托管在 Siteground 的共享主机中。我已经建立了一个每天晚上执行一个 php 文件的 cron 作业。问题是该文件包含一个执行代码 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秒的执行时间?我不能搬到专用主机,所以我需要弄清楚其他事情..

提前感谢

4

4 回答 4

3

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

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

于 2013-07-03T07:48:31.710 回答
1
set_time_limit(30); //Enter the value in seconds

在 php 中检查set_time_limit()

于 2013-07-03T07:44:31.983 回答
1

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

PHP 手册

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

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

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

您的 Web 服务器可以有其他可能会中断 PHP 执行的超时配置。Apache 有一个 Timeout 指令,而 IIS 有一个 CGI 超时功能。两者都默认为 300 秒。有关特定详细信息,请参阅您的 Web 服务器文档。

于 2013-07-03T07:45:34.533 回答
0
set_time_limit(999); // some number you want

尝试这个。

于 2013-07-03T07:42:05.537 回答