避免PHP执行时间限制

时间:2010-01-27 14:27:11

标签: php time limit execution

我需要用PHP语言创建一个执行数字排列的脚本。但PHP的执行时间限制设置为60秒。如何运行脚本,以便运行超过60个sesunde,而不是被服务器中断。我知道我可以在php中更改最大执行时间限制,但我想听到另一个版本,它不需要事先知道脚本的执行时间。

一位朋友建议我登录并经常从服务器注销,但我不知道该怎么做。

欢迎任何建议。示例代码很有用。

感谢。

首先我需要输入一个数字,比如说25.此后脚本启动,需要执行以下操作:对于每个数字< = 25以上,它将创建一个文件,其中包含生成的数字现阶段;对于下一个数字,它将打开previuos创建的文件,并将在打开的文件的行上创建另一个文件,依此类推。因为这需要很长时间,我需要避免服务器破坏脚本。

4 个答案:

答案 0 :(得分:2)

@emanuel:

我想当你的朋友告诉你“朋友建议我登录并经常从服务器注销,但我不知道该怎么做。”,他/她必须意味着“将你的脚本计算拆分成x个工作并单独运行“

例如,使用此脚本,您可以执行150次以达到150! (分解)并显示结果:

//脚本名称:calc.php

<?php

 session_start();

 if(!isset($_SESSION['times'])){

    $_SESSION['times'] = 1;

    $_SESSION['result']  = 0;

 }elseif($_SESSION['times'] < 150){

    $_SESSION['times']++;

    $_SESSION['result'] = $_SESSION['result'] * $_SESSION['times'];

    header('Location: calc.php');

 }elseif($_SESSION['times'] == 150){

    echo "The Result is: " . $_SESSION['result'];

    die();

 }

?>

BTW(@Davmuz),您只能在Apache服务器上使用set_time_limit()函数,它不是Microsoft IIS服务器上的有效函数。

答案 1 :(得分:0)

set_time_limit(0)

答案 2 :(得分:0)

您可以尝试将要进行的调用放入队列中,在操作完成时将序列化为文件(或内存缓存?)。然后你可以使用CRON-daemon每六十秒执行一次这个队列,这样它就可以继续完成工作,并完成任务。

这种方法的缺点是添加到队列,文件锁定等问题,如果你需要立即得到结果,这可能会很麻烦。如果你要向Db添加内容,它可能会有用。而且效率不高。

答案 3 :(得分:0)

使用set_time_limit(0)但您必须禁用safe_mode: http://php.net/manual/en/function.set-time-limit.php 我建议使用固定时间(set_time_limit(300)),因为如果脚本中存在问题(无限循环或内存泄漏),这不会成为问题的根源。

与Apache一样,Web服务器的最大时间限制为300秒,因此您必须对其进行更改。如果你想做一个Comet应用程序,最好选择另一个可能需要很长时间的Apache服务器而不是Apache。

如果您需要较长的执行时间来执行繁重的算法,您还可以实现并行处理:http://www.google.com/#q=php+parallel+processing 或者将输入数据和计算机与另一个外部脚本与cron或其他任何内容一起存储。