我需要用PHP语言创建一个执行数字排列的脚本。但PHP的执行时间限制设置为60秒。如何运行脚本,以便运行超过60个sesunde,而不是被服务器中断。我知道我可以在php中更改最大执行时间限制,但我想听到另一个版本,它不需要事先知道脚本的执行时间。
一位朋友建议我登录并经常从服务器注销,但我不知道该怎么做。
欢迎任何建议。示例代码很有用。
感谢。
首先我需要输入一个数字,比如说25.此后脚本启动,需要执行以下操作:对于每个数字< = 25以上,它将创建一个文件,其中包含生成的数字现阶段;对于下一个数字,它将打开previuos创建的文件,并将在打开的文件的行上创建另一个文件,依此类推。因为这需要很长时间,我需要避免服务器破坏脚本。
答案 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或其他任何内容一起存储。