Bri*_*ker 1 php loops filesize while-loop
我做了一些PHP编码,熟悉它的各个方面.
我已经创建了一个PHP脚本,它作为cron作业运行,将从数据库中提取数据,如果满足某些条件,则会将某些信息写入文件.
由于数据库中可能存在多个结果,因此会执行循环以遍历数据库中的每个结果.
在该循环中,我有另一个循环,它将数据写入文件.然后使用cron作业每分钟调用此文件并在bash脚本中运行内容.
因此,设置PHP循环以查看文件是否通过使用filesize()函数写入了任何内容.如果filesize不为零,那么它将睡眠10秒并尝试再次读取它.这是代码:
while(filesize('/home/cron-script.sh') != 0)
{
sleep(10);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当运行filesize时,它似乎在文件上放置了某种锁或其他东西.cron作业可以毫无问题地执行bash脚本,脚本中的最后一个命令是将文件清零:
cat /dev/null > /home/cron-script.sh
Run Code Online (Sandbox Code Playgroud)
但是,似乎一旦启动上面的while循环,它就会锁定原始文件大小.举个例子,我只是在cron-script.sh文件中输入"exit"一词,然后运行测试脚本:
while(filesize("/home/cron-script.sh") != 0)
{
echo "filesize: " . filesize("/home/cron-script.sh");
sleep(10);
}
Run Code Online (Sandbox Code Playgroud)
循环是无限的,当我输入单词"exit"时将继续显示"filesize:4".然后我将在终端发出命令:
cat /dev/null > /home/cron-script.sh
Run Code Online (Sandbox Code Playgroud)
然后,当我运行上面的测试脚本时,将清除该文件.但是,它继续说文件大小为4并且永远不会返回0 - 因此使PHP脚本运行直到达到执行时间限制.
有人可以就如何解决这个问题给我一些建议吗?本质上,我只需要一些方法来读取文件大小 - 如果文件中有任何类型的数据,它将需要循环一个休眠例程,直到文件被清除.该文件应在一分钟内清除(因为cron作业每分钟调用一次cron-script.sh文件).
谢谢!
Tom*_*Tom 13
来自http://www.php.net/manual/en/function.filesize.php
注意:此函数的结果已缓存.有关更多详细信息,请参阅clearstatcache().
要解决此问题,请记得在致电clearstatcache()前致电filesize():
while(filesize("/home/cron-script.sh") != 0)
{
echo "filesize: " . filesize("/home/cron-script.sh");
sleep(10);
clearstatcache();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |