我的递归函数有问题。我要等到文本文件输入更改后再重定向到新页面。
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] 删除。
我来说两句