避免PHP执行时间限制

避免PHP执行时间限制,php,time,limit,execution,Php,Time,Limit,Execution,我需要用PHP语言创建一个执行数字排列的脚本。但是PHP的执行时间限制设置为60秒。如何运行脚本,以便在需要运行超过60个sesund时,不会被服务器中断。我知道我可以更改php中的最大执行时间限制,但我想听听另一个版本,它不需要事先知道脚本的执行时间 一位朋友建议我经常从服务器上登录和注销,但我不知道如何做到这一点 欢迎任何建议。一个示例代码会很有用 谢谢 首先我需要输入一个数字,比如说25。在此之后,脚本启动,它需要执行以下操作:对于每个编号,您可以尝试将要进行的调用放入队列中,当操作完成时

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

一位朋友建议我经常从服务器上登录和注销,但我不知道如何做到这一点

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

谢谢


首先我需要输入一个数字,比如说25。在此之后,脚本启动,它需要执行以下操作:对于每个编号,您可以尝试将要进行的调用放入队列中,当操作完成时,您可以将队列序列化到文件(或内存缓存?)。然后,您可以使用CRON守护进程每六十秒执行一次该队列,这样它就可以继续工作并完成任务

这种方法的缺点是在添加到队列、文件锁定等方面存在问题,如果您需要立即得到结果,这可能会很麻烦。如果您正在向数据库中添加内容,可能会成功。此外,它也不是很有效。

使用设置时间限制(0),但必须禁用安全模式: 我建议使用固定时间(设置时间限制(300)),因为如果脚本中有问题(无休止的循环或内存泄漏),这不会是问题的根源

web服务器,如Apache,也有300秒的最大时间限制,因此您必须更改它。如果您想使用Comet应用程序,最好选择另一个web服务器,而不是Apache,因为它的请求时间较长

如果繁重的算法需要较长的执行时间,还可以实现并行处理: 或者使用另一个带有cron的外部脚本或其他任何东西存储输入数据和计算机。

@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();

 }

?>


顺便说一句(@Davmuz),您只能在Apache服务器上使用set_time_limit()函数,这在Microsoft IIS服务器上是无效的函数。

您知道他明确表示不想要这个吗?虽然这正是问题所要求的,但我认为最好使用set_time_limit(20)在循环的每次迭代中。@svens虽然OP明确表示不想更改时间限制,但我同意这可能是最好的方法。我知道这很旧,但通过将时间限制设置为0来禁用时间限制“不需要提前知道执行时间”,所以在我看来这是一个有效的解决方案。请,具体说明你必须做什么,回答可能会更准确。+1这基本上就是我答案的客户端实现:将其放入位,然后逐个执行。但是,在此解决方案中,如果浏览器关闭,则过程结束。@turik如下所述:
$\u SESSION['result']=1在第5行。
<?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();

 }

?>