我正在尝试创建一个创建唯一代码并将它们写入文本文件的脚本。 我已设法生成代码,并将它们写入文件。
现在我的问题是我的循环继续运行,导致在服务器超时之前将超过92 000个代码写入文件。
我已经做了一些日志记录,似乎一切正常,只是在经过一定时间后,所有变量都被重置,一切都从头开始。发生这种情况的时间间隔会不时发生变化。
我已将ini_set('memory_limit', '200M'); ini_set('max_execution_time',0);
设置在我的脚本顶部。也许有一个我超时的PHP超时设置?
脚本是控制器中的一个功能。我在这个函数的开头设置了ini_set。这是我正在经历的循环:
public function generateAction() {
ini_set('memory_limit', '200M');
ini_set('max_execution_time',0);
$codeArray = array();
$numberOfCodes = 78000;
$codeLength = 8;
$totaalAantal = 0;
$file = fopen("codes.txt","a+");
while(count($codeArray)<$numberOfCodes){
$code = self::newCode($codeLength);
if(!in_array($code,$codeArray))
{
$totaalAantal++;
$codeArray[] = $code;
fwrite($file,'total: '.$totaalAantal."\r\n");
}
}
fclose($file);
}
在文件中,这将是这样的:
total: 1
total: 2
total: ...
total: 41999
total: 42000
total: 1
total: 2
total: ...
total: 41999
total: 42000
感谢。
编辑:到目前为止,我们已经确定在脚本结束之前调用generateAction()2到3次,只应调用一次。
答案 0 :(得分:1)
我已经找到了解决这个问题的方法。 主机的脚本限制设置为90秒,因为此脚本必须运行更长时间,所以我必须通过命令行运行它。
答案 1 :(得分:0)
考虑到使用uniqid()的测试,我们可以说变量没有被重置,但是方法generateAction()被多次调用。
由于您的代码可能是同步的,我们可能会说多次调用generateAction(),因为主脚本被多次调用。
详细情况会怎样?
由于算法的性质,循环中的每次传递都比前一次慢。因此执行generateAction()的持续时间可能会很长。
您可能不会等到结束,您可以停止该过程,甚至可以从新页面启动该过程。尽管如此,这个过程并没有真正停止这么快,而且它一直在后端运行。我在我的本地WAMP / LAMP安装中发现了这样的行为:即使我关闭页面,即使关闭导航器或者重新启动Apache,脚本也不会停止,即使我停止页面也是如此。
因此,您可能会在codes.txt
文件中同时写入多个脚本进程。
为了避免这种情况,您可以使用函数flock()在循环期间锁定文件。