我有收集一些数据的PHP脚本。几秒钟后,此脚本使用exec()命令调用自身,再次收集数据。由于某些原因,我真的不能在这里使用CRON。该脚本如下所示:
<?php
$fh = fopen('log.txt', 'a');
fwrite($fh, 'Collecting data...');
// wait some time and run itself to collect data again
exec('(sleep 15 && php collect.php) > /dev/null 2>&1 &');
fwrite($fh, 'Data collected.');
fclose($fh);它正常工作,但有一个问题是我两天多的工作都解决不了的……
如您所见,在脚本的引导下,我使用fopen()函数设置了日志编写器。问题是,当脚本计划使用exec()函数再次运行时,打开的日志文件也会在此脚本的下一次运行中打开!这对我来说很奇怪,但看起来exec()函数正在传递文件处理程序,但这可能吗?
这个问题很严重,因为一段时间后,我可以在我的服务器上看到许多相同的文件被一个进程打开:

如果可以的话,请帮帮我。我试了所有的方法都没有效果:
发布于 2016-09-15 04:36:13
如果您正在递归地调用脚本(如果您发布的脚本是collect.php脚本),那么您可能希望在关闭文件句柄后运行exec命令,如下所示:
<?php
$fh = fopen('log.txt', 'a');
fwrite($fh, 'Collecting data...');
// do stuff
fwrite($fh, 'Data collected.');
fclose($fh);
// wait some time and run itself to collect data again
exec('(sleep 15 && php collect.php) > /dev/null 2>&1 &');
?>https://stackoverflow.com/questions/39499089
复制相似问题