Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将脚本分散到多个部分以避免服务器超时_Php_Apache - Fatal编程技术网

PHP将脚本分散到多个部分以避免服务器超时

PHP将脚本分散到多个部分以避免服务器超时,php,apache,Php,Apache,我有一个很长的脚本要执行,所以当我运行它时,它在我的Web服务器上达到了最大执行时间,并最终超时 为了说明这一点,假设我有一个for循环,它进行了一百万次非常密集的操作。我如何将这个循环的执行分散到几个部分,以便不达到Web服务器的最大执行时间 非常感谢,最好的解决方案是使用更改超时。否则,您可以使用301重定向在超时时发送到更新的URL $threshold = 10000; $t = microtime(); $i = isset( $_GET['i'] ) ? $_GET['i'] : 0

我有一个很长的脚本要执行,所以当我运行它时,它在我的Web服务器上达到了最大执行时间,并最终超时

为了说明这一点,假设我有一个for循环,它进行了一百万次非常密集的操作。我如何将这个循环的执行分散到几个部分,以便不达到Web服务器的最大执行时间

非常感谢,

最好的解决方案是使用更改超时。否则,您可以使用301重定向在超时时发送到更新的URL

$threshold = 10000;
$t = microtime();
$i = isset( $_GET['i'] ) ? $_GET['i'] : 0;

for( $i; $i < 10000000; $i++ )
{
    if( microtime - $t > $threshold )
    {
        header('Location: http://www.example.com/?i='.$i);
        exit;
    }

    // Your code
}
$threshold=10000;
$t=微时间();
$i=isset($\u GET['i'])$_获取['i']:0;
对于($i;$i<10000000;$i++)
{
如果(微时间-$t>$threshold)
{
标题('位置:http://www.example.com/?i="(一元),;
出口
}
//你的代码
}
浏览器在停止之前只会执行一些重定向,最好使用javascript强制重新加载页面。

最佳解决方案是使用更改超时。否则,您可以使用301重定向在超时时发送到更新的URL

$threshold = 10000;
$t = microtime();
$i = isset( $_GET['i'] ) ? $_GET['i'] : 0;

for( $i; $i < 10000000; $i++ )
{
    if( microtime - $t > $threshold )
    {
        header('Location: http://www.example.com/?i='.$i);
        exit;
    }

    // Your code
}
$threshold=10000;
$t=微时间();
$i=isset($\u GET['i'])$_获取['i']:0;
对于($i;$i<10000000;$i++)
{
如果(微时间-$t>$threshold)
{
标题('位置:http://www.example.com/?i="(一元),;
出口
}
//你的代码
}

浏览器在停止之前只会执行一些重定向,您最好使用javascript强制重新加载页面。

如果您在托管服务器上拥有正确的权限,您可以使用php解释器执行php脚本并在后台运行


请参阅。

如果您在托管服务器上拥有正确的权限,则可以使用php解释器执行php脚本并在后台运行


请参阅。

有一天,我使用了一种技术,将工作从一个文件分为三部分。这只是一个由12万个元素组成的阵列,需要密集的操作。我创建了一个拆分器脚本,将数组存储在一个数据库中,每个数据库的大小为40.000。然后我创建了一个HTML文件,重定向到第一个PHP文件以计算前40.000个元素。在计算了前40.000个elments之后,我又将一个HTML转发到下一个PHP文件,以此类推


不是很优雅,但它很有效:-)

有一天,我使用了一种技术,将工作从一个文件分为三部分。这只是一个由12万个元素组成的阵列,需要密集的操作。我创建了一个拆分器脚本,将数组存储在一个数据库中,每个数据库的大小为40.000。然后我创建了一个HTML文件,重定向到第一个PHP文件以计算前40.000个元素。在计算了前40.000个elments之后,我又将一个HTML转发到下一个PHP文件,以此类推


不是很优雅,但它工作了:-)

如果您正在运行一个需要在未知时间执行的脚本,您可以使用:


如果您运行的脚本需要在未知时间内执行,您可以使用:


如果您的应用程序将循环已知次数(即您确定它将在一段时间内完成),您可以增加循环内的时间限制:

foreach ($data as $row) {
    set_time_limit(10);
    // do your stuff here
}

此解决方案将保护您不受一次失控迭代的影响,但可以让您的整个脚本在需要的时间内不受干扰地运行。

如果您的应用程序将循环已知次数(即,您确定它将在一段时间内完成),您可以增加循环内的时间限制:

foreach ($data as $row) {
    set_time_limit(10);
    // do your stuff here
}

此解决方案将保护您不受一次失控迭代的影响,但可以让您的整个脚本在需要的时间内不受干扰地运行。

如果可能,您可以使脚本能够处理所需操作的一部分。一旦完成,比如说10%,您可以通过AJAX再次调用脚本来执行下一个10%。但在某些情况下,这并不是一个理想的解决方案,这实际上取决于你在做什么


例如,我使用这种方法创建了一个只在我的计算机上运行的基于web的爬虫程序。如果必须立即进行操作,它也会超时。因此,它被分成200个“任务”,每一个任务在前一个任务完成后通过Ajax调用。工作非常完美,它已经运行了一年多了(爬行?

如果可能的话,您可以制作脚本,以便它处理所需操作的一部分。一旦完成,比如说10%,您可以通过AJAX再次调用脚本来执行下一个10%。但在某些情况下,这并不是一个理想的解决方案,这实际上取决于你在做什么


例如,我使用这种方法创建了一个只在我的计算机上运行的基于web的爬虫程序。如果必须立即进行操作,它也会超时。因此,它被分成200个“任务”,每一个任务在前一个任务完成后通过Ajax调用。工作非常完美,它已经运行了一年多了(爬行?

或者更好,跳过重定向并使用AjaxThank amccausl,这是我的想法,但我正在研究可能更优雅的解决方案,尽管我认为在PHP中运行这样的脚本一开始并不优雅..干杯或者更好,跳过重定向并使用AjaxThank amccausl,这是我的想法,但我正在研究可能更优雅的解决方案,尽管我认为在PHP中运行这样的脚本一开始并不优雅..干杯,这显然是我的做法。谢谢!是的,对我来说,这显然是一条路。谢谢!