我有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()函数正在传递文件处理程序,但它有可能吗?
问题很严重,因为经过一段时间我可以在我的服务器中看到很多通过一个进程打开相同的文件:
如果可以,请帮助我。我尝试了一切没有效果:(
答案 0 :(得分:2)
如果您以递归方式调用脚本(如果您发布的脚本是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 &');
?>