我必须编写一个程序,检查我文件夹中的特定目录是否有任何文件(特定扩展名),如果找到任何文件,它会逐个读取它们并将数据加载到数据库中。
这是我心目中的粗略算法:
使用无限while()
循环,不断检查目录是否包含该特定扩展名的任何文件(例如,检查目录是否包含任何*.xml
个文件)。我可以使用PHP glob()
函数。
如果是,则在foreach
循环中,从每个文件中读取数据并将其加载到数据库中。
加载文件数据后,将其删除。
我的问题:
我会不断检查目录中是否有.xml
个文件。这意味着很多次我会得到 true
(意思是/说"是的,目录中有.xml
个文件" )甚至对于数据 BEING 加载的文件也是如此。
因此,一旦在目录中找到了一个文件,我需要一个检查,检查在加载到数据库的过程中它的数据是否为。如何做我检查一下?
数据加载过程是我从文件中将有用的数据提取到.csv
文件中,然后使用LOAD DATA INFILE
SQL查询将数据加载到我的MySQL数据库中。
答案 0 :(得分:2)
一种解决方案是使用此答案中建议的lsof
:https://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。