如何检查文件是否正在使用,即正在对该文件中的数据执行某些命令?

时间:2016-11-12 12:55:50

标签: php mysql database

我必须编写一个程序,检查我文件夹中的特定目录是否有任何文件(特定扩展名),如果找到任何文件,它会逐个读取它们并将数据加载到数据库中。

这是我心目中的粗略算法:

  1. 使用无限while()循环,不断检查目录是否包含该特定扩展名的任何文件(例如,检查目录是否包含任何*.xml个文件)。我可以使用PHP glob()函数。

  2. 如果是,则在foreach循环中,从每个文件中读取数据并将其加载到数据库中。

  3. 加载文件数据后,将其删除。

  4. 我的问题:

    我会不断检查目录中是否有.xml个文件。这意味着很多次我会得到 true (意思是/说"是的,目录中有.xml个文件" )甚至对于数据 BEING 加载的文件也是如此。

    因此,一旦在目录中找到了一个文件,我需要一个检查,检查在加载到数据库的过程中它的数据是否为如何做我检查一下?

    数据加载过程是我从文件中将有用的数据提取到.csv文件中,然后使用LOAD DATA INFILE SQL查询将数据加载到我的MySQL数据库中。

1 个答案:

答案 0 :(得分:2)

一种解决方案是使用此答案中建议的lsofhttps://stackoverflow.com/a/6767891/2032943来观察事件,然后对其采取行动。

此外,如果您想要查看该文件已被其他命令使用,您可以使用linux lsof | grep <filename> 命令检查某个进程使用的文件是否有打开的句柄:

if($is_query_run=mysql_query($query)){ //Here you execute the query
   while($query_execute=$query_execute=mysql_fetch_assoc($is_query_run)){  //Here you get one row from execution result

      $rows = array(); //You create array into $rows, what was in $rows before will be wiped
      $rows[] = $query_execute; // You insert one row you just fetch from result to $rows

      print json_encode($rows); // You encode $rows (which always has only one element as you wipe it every iteration)

  }
}

请注意,这些命令特定于linux,不适用于Windows。