PHP重置变量

时间:2012-04-27 13:15:25

标签: php

我正在尝试创建一个创建唯一代码并将它们写入文本文件的脚本。 我已设法生成代码,并将它们写入文件。

现在我的问题是我的循环继续运行,导致在服务器超时之前将超过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次,只应调用一次。

2 个答案:

答案 0 :(得分:1)

我已经找到了解决这个问题的方法。 主机的脚本限制设置为90秒,因为此脚本必须运行更长时间,所以我必须通过命令行运行它。

答案 1 :(得分:0)

考虑到使用uniqid()的测试,我们可以说变量没有被重置,但是方法generateAction()被多次调用。

由于您的代码可能是同步的,我们可能会说多次调用generateAction(),因为主脚本被多次调用。

详细情况会怎样?

由于算法的性质,循环中的每次传递都比前一次慢。因此执行generateAction()的持续时间可能会很长。

您可能不会等到结束,您可以停止该过程,甚至可以从新页面启动该过程。尽管如此,这个过程并没有真正停止这么快,而且它一直在后端运行。我在我的本地WAMP / LAMP安装中发现了这样的行为:即使我关闭页面,即使关闭导航器或者重新启动Apache,脚本也不会停止,即使我停止页面也是如此。

因此,您可能会在codes.txt文件中同时写入多个脚本进程。

为了避免这种情况,您可以使用函数flock()在循环期间锁定文件。