我正在编写一个简单的PHP脚本来监视文件夹及其子文件夹是否有任何更改(新文件、修改、删除),然后执行操作。
我将使用php -f script.php
从windows上的命令行运行此脚本。
我一直在寻找一种在具有PHP绑定的窗口上查看文件夹的方法。像inotify或gamin这样的窗户会很好。
这个问题的答案提到了FindFirstChangeNotification
,但我找不到任何PHP绑定
在带有PHP绑定的窗口上,是否有用于文件夹/文件系统监视的库/软件?
我最终只使用在无限循环中调用的RecursiveDirectoryIterator
编写了一个简单的函数。
我所要做的就是检查文件或文件夹的最后修改时间,然后返回true或false。
这不是一个非常精确的方法,但它很符合我的目的。在后台,脚本使用了大约12MB的内存。
您可以使用inotify_add_watch PHP函数来获取指定目录中任何更改(新文件、修改、删除)的通知。它的工作方式与Windows上的FileSystemWatcher相同。
如果您的服务器上安装了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这样的匹配,它将运行测试,否则只需按按摩即可终止。为了方便起见,可以将其设置为在出现错误时向预定义的列表电子邮件发送电子邮件。