是否有任何方法可以检查来自php脚本的另一个进程正在访问或修改文件的ID。我试图使用filemtime(),fileatime()和filectime()函数,但我有一个循环中的脚本正在连续检查但似乎一旦脚本被执行它只需要从第一次开始的时间文件被检查..一个例子是将文件上传到FTP或SMB共享我试图在下面
while(1==1)
{
$LastMod = filemtime("file");
if(($LastMod +60) > time())
{
echo "file in use please wait... last modified : $LastMod";
sleep(10);
}else{
process file
}
}
我知道文件不断变化,但$ LastMod变量没有更新,但是结束进程再次执行将从文件中获取一个新的$ LastMod,但dosnt似乎每次在循环中检查文件时都会更新
我也尝试过看看filesize()但是得到了相同的症状我也看了flock()但是因为文件是在PHP之外创建或修改的,所以我看不出它是如何工作的。
如果有人有任何解决方案,请告诉我
感谢Vip32
PS。使用PHP处理文件,因为需要与mysql交互并查询外部网站
答案 0 :(得分:3)
文件元数据函数全部关闭stat()
输出,缓存其数据,因为stat()调用是一个相对昂贵的函数。您可以清空该缓存以强制stat()使用clearstatcache()
还有其他机制可以监视文件更改。不要在PHP中进行循环并重复执行stat(),而是考虑使用外部监视应用程序/脚本,它可以挂钩到操作系统提供的机制,并在文件真正发生更改时按需调用PHP脚本。
答案 1 :(得分:0)
将clearstatcache();
添加到您的循环中:
while(true)
{
$LastMod = filemtime("file");
clearstatcache();
if(($LastMod +60) > time())
{
echo "file in use please wait... last modified : $LastMod";
sleep(10);
}else{
process file
}
}