致命错误:第15行的C:\ xampp \ htdocs \ main.php中耗尽了134217728字节的允许内存大小(尝试分配8192字节)

苏兰加(Suranga premakumara)

我的递归函数有问题。我要等到文本文件输入更改后再重定向到新页面。

15线是

$readedData = fread($myfile,filesize("my1.txt"));

这是我的职责

first();

function first() {
    $myfile = fopen("my1.txt", "r") or die("Unable to open file!");
    $number = fread($myfile,filesize("my1.txt"));

    fclose($myfile);
    recursion($number);
}

function recursion($number2) { 
    $myfile = fopen("my1.txt", "r") or die("Unable to open file!");
    $readedData = fread($myfile,filesize("my1.txt"));

    echo ($readedData ); 

    fclose($myfile);
    if($number2 != $readedData){
        return (recursion($readedData));
    }
    else if($number2 == $readedData){
        return(first());
    }
}
安德拉斯

是的,您做到了,您的递归不受限制,它使调用变得越来越深。等待条件通常是通过条件循环而不是自递归来处理的。

first()总是调用recursion()

recursion()调用自身,或调用first()。总是调用recursion()。

您会看到问题-这些调用永无止境,它们始终调用recursion()。每个调用都会分配堆栈空间以运行,直到达到配置的最大限制(默认为130MB,这也是您的错误所报告的)

编辑:php没有像javascript这样的setInterval(),在php中,递归调用是真正的递归,它们不只是将一个可连续对象排队。要等到文件循环更改后,可以执行以下操作:

function waitAndRedirect( $filename ) {
    waitForchange(file_get_contents($filename));
    handleRedirect();
}

function waitForChange( $oldData ) {
    while (true) {
        $currentData = file_get_contents($filename);
        if ($currentData !== $oldData) return;
        else usleep(200);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章