我正在编写一个简单的PHP脚本来查看文件夹及其子文件夹以查找任何更改(新文件,修改,删除),然后执行操作。
我将使用php -f script.php
从Windows上的命令行运行此脚本。
我一直在寻找一种方法来查看具有PHP绑定的Windows上的文件夹。像inotify或gamin for windows会很不错。
this question的答案提及FindFirstChangeNotification
,但我找不到任何PHP绑定。
是否有任何用于在带有PHP绑定的窗口上观看文件夹/文件系统的库/软件?
答案 0 :(得分:2)
我最后只是使用在无限循环中调用的RecursiveDirectoryIterator
来编写一个简单的函数。
我所要做的就是检查文件或文件夹的上次修改时间并返回true或false。
这不是一个非常精确的方法,但它很好地满足了我的目的。脚本坐在后面,使用大约12MB的内存。
答案 1 :(得分:1)
您可以使用inotify_add_watch PHP函数获取指定目录中任何更改(新文件,修改,删除)的通知。它的工作方式与Windows上的FileSystemWatcher相同。
答案 2 :(得分:-1)
如果您在服务器上安装了Ruby,则可以使用watchr gem
它的功能非常简单,一旦发生火灾/目录更改,它会执行您定义的脚本,这正是您尝试执行的操作。
以下是一个示例文件autotest.rb
:
#!/usr/bin/ruby
# Match all PHP files in your project directory
watch("<PROJECT_DIR_PATH>/(.*).<FILE_EXTENSION_PHP>") do |match|
run_test %{<PROJECT_DIR_PATH>/Tests/#{match[1]}Test.php}
end
# Match all files in your Tests directory
watch("<PROJECT_DIR_PATH>/Tests/.*Test.php") do |match|
run_test match[0]
end
# Run test if there are matches
def run_test(file)
unless File.exist?(file)
puts "#{file} does not exist"
return
end
puts "Running #{file}"
result = `phpunit #{file}`
puts result
end
所以这将匹配所有PHP或任何其他扩展文件,并针对文件名运行RegEx,如果有匹配的/Project/Tests/ClassNameTest.php,它将运行测试,否则只需按下终止。为方便起见,可以设置为在发生错误时将电子邮件发送到预定义的列表电子邮件。